2

一部のステートメントに依存する親クラスを設定するにはどうすればよいですか?

$switcher = true;

if($switcher) {
 class a extends class1{
 ...
}
else {
 class a extends class2 {
 ...
}

私はこのようなものが必要です

$myclass = $switcher ? 'class1' : 'class2';

class a extends $myclass { //sure this will not work

しかし、$myclassなしで使用する方法eval

ありがとう

4

3 に答える 3

5

クラスは実行時ではなくコンパイル時に解析されるため、実際に. 代わりに、異なる親を持つ 2 つのクラスを作成し、それらを動的にインスタンス化することを検討してください$switcher。実行時に継承階層を変更しようとしてもあまり意味がありません。

あなたの意図したアプローチは、アーキテクチャを再考することを叫んでいるようです。class1とが別個のクラスである場合、定義上、下流の子クラスと交換可能な共通点はあまりないclass2はずです。共通点が多い場合は、継承階層の上位の問題を示している可能性があります。他から継承する必要があります。

于 2013-01-16T21:16:47.567 に答える
1

常識的なアプローチは、2 つのクラスを宣言する方法です。それらA1を と とA2呼びClass1ましょうClass2。次に、インスタンス化するものを決定します。

ただし、それなしでは、あなたが望むことを正確に行うことはできませんeval。PHP は無名関数と無名クロージャをサポートしていますが、無名クラスはサポートしていません。

于 2013-01-16T21:17:12.650 に答える
0

あなたはこのようにそれを行うことができます:

class MyCommon {}
class MyClassA extends MyCommon {}
class MyClassB extends MyCommon {}

$switcher = true;

if ($switcher) {
    $myinstance = new MyClassA();
} else {
    $myinstance = new MyClassB();
}

var_dump($myinstance instanceof MyCommon); // true, because of inheritance
var_dump($myinstance instanceof MyClassA); // true
var_dump($myinstance instanceof MyClassB); // false
var_dump(get_class($myinstance)); // "MyClassA"
于 2013-01-16T21:20:26.603 に答える