既存のクラスがあり、「プラグイン」をロードするシステムを作成したいと考えています。これらの「プラグイン」はファイルとして作成され、メイン クラスとともにファイルに含まれます。
メインクラスは、これらの小さな「プラグイン」を独自のクラスで拡張する必要があると思います。問題は、どのプラグインに異なるユーザーが含まれるか分からないことです。したがって、クラスの拡張は動的です。
おそらくevalを使用せずに、オンザフライでクラスを拡張するにはどうすればよいですか(私もテストしていません)?
既存のクラスがあり、「プラグイン」をロードするシステムを作成したいと考えています。これらの「プラグイン」はファイルとして作成され、メイン クラスとともにファイルに含まれます。
メインクラスは、これらの小さな「プラグイン」を独自のクラスで拡張する必要があると思います。問題は、どのプラグインに異なるユーザーが含まれるか分からないことです。したがって、クラスの拡張は動的です。
おそらくevalを使用せずに、オンザフライでクラスを拡張するにはどうすればよいですか(私もテストしていません)?
PHP の魔法の関数を使用して、それを行うことができます。クラス A があるとします。いくつかの追加メソッドを使用できる A の「インスタンス」が必要です。
class A {
public $publicA;
public function doA() {
$this->publicA = "Apple";
}
}
class B {
public $publicB;
public function doB() {
$this->publicB = "Bingo";
}
private $object;
public function __construct($object) {
$this->object = $object;
}
public function __call($name, $arguments) {
return call_user_func_array(array($this->object, $name), $arguments);
}
public function __get($name) {
return $this->object->$name;
}
public function __set($name, $value) {
$this->object->$name = $value;
}
}
$b = new B(new A);
$b->doA();
$b->doB();
echo "$b->publicA, $b->publicB";
インスタンス $b には、A と B の両方のメソッドとプロパティがあります。この手法を拡張して、任意の数のクラスから機能を集約できます。
__autoload について話しているのですか?
function __autoload($class) {
require_once($class.'.php');
}
$object = new Something();
これはしようとしますrequire_once(Something.php);