私は大量のPHPクラス関数を即座にインポートする方法を理解しようとしています。たとえば...オンザフライでPHPクラス関数を再定義しますか?
class Entity
{
public function __construct($type)
{
require_once $type."_functions.php"
}
// ...
}
$person = new Entity("human");
$person->sayhi();
$cow = new Entity("cow");
$cow->sayhi();
human_functions.php:
class Entity redefines Entity
{
public function sayhi()
{
echo "Hello world!";
}
}
cow_functions.php:
class Entity redefines Entity
{
public function sayhi()
{
echo "Moo!";
}
}
私は "実験" ですclasskit_method_redefine()
とrunkit_method_redefine()
のようないくつかの可能性を(発見しましたとにかく現在実行中のクラスを変更することはできません)。私はPHP 5.3.3を使用していますので、Traitsを使用することはできません(これは私がとにかく探しているものか分かりません)。
// Example 2:
class OtherEntity { /* Code Here */ }
class Entity
{
public function __construct($type)
{
global $foo;
unset($foo);
$foo = new OtherEntity();
}
}
$foo = new Entity();
しかし、これは非常にハック方法のように感じている:私ははこのようなハンドラの変数を再定義し成功を収めている。さらに重要なことに、私がという名前をのすべてのインスタンスに指定しないと、動作しません。私がやろうとしていることに対する回避策はありますか?
注:私はクラスを拡張することができますが、私の場合、Entityクラスが開始されたときに、どのサブクラスを開始する必要があるかを事前に知る安全な方法はありません。おそらく、以下のような書き方があります。
public function changeClass
{
this->class = OtherEntity;
}
ありがとうございます!
あなたの実際の問題に対する別の解決策があります。あなたの最初の例は[工場パターン](http://www.tutorialspoint.com/design_pattern/factory_pattern.htm)を提案していますが、あなたが本当に達成したいことについてはわかりません。 – VolkerK
あなたは考え直す必要があるいくつかのデザインの選択肢を作った。 –
は実際のphp関数を '再定義する '。私はあなたが '拡張'を探していると信じています – CodeGodie