2009-07-18 7 views
0

からクラスを構築する:PHP構文:私はこのようなメンバ変数からクラスを作成しようとしているメンバ変数

<? 
class A{ 
    private $to_construct = 'B'; 
    function make_class(){ 
     // code to make class goes here 
    } 

} 

class B{ 
    function __construct(){ 
     echo 'class constructed'; 
    } 
} 

$myA = new A(); 
$myA->make_class(); 
?> 

私が使用してみました:

$myClass = new $this->to_construct(); 

$myClass = new {$this->to_construct}(); 

でもどちらも機能しません。私はこれをやらなければならなくなりました:

$constructor = $this->to_construct; 
$myClass = new $constructor(); 

ローカル変数にクラス名を格納せずにこれを行う方法があるようです。何か不足していますか?

答えて

3

これを試しましたか?

$myClass = new $this->to_construct; 
+0

おかげで、私はそれが機能し表示するために括弧を置くために必要なことを考えていました。コンストラクタにパラメータを渡す必要がある場合は、ローカルクラス名を格納しなくてもこれを行う方法はありますか? – Craig

+0

しかし、それは機能ではありません。私はあなたがPHPで必要なものをどうやってやるのかも分かりません。 – jkeys

2

PHP 4などを使用していますか? On 5.2.9 $myClass = new $this->to_construct();は完全に機能します。

最終的には、PHPを使用して生活する必要があります。 PHPの構文とセマンティクスは非常に矛盾しています。たとえば、呼び出し結果への配列アクセスは、構文エラーです。

function foo() { 
    return array("foo","bar"); 
} 
echo $foo()[0]; 

これ以外の言語でも可能ですが、PHPではできません。場合によっては、ローカル変数に値を格納するだけで済みます。

旧バージョンのPHPではfunc_get_args()と同じです。それを関数に渡したければ、まずローカル変数に格納する必要がありました。

0

私はあなたがこのようなことをしようとしている行の間でよく読んでください。右?

class createObject{ 
    function __construct($class){ 
     $this->$class=new $class; 
    } 

} 

class B{ 
    function __construct(){ 
     echo 'class B constructed<br>'; 
    } 
    function sayHi(){ 
     echo 'Hi I am class: '.get_class(); 
    } 
} 

class C{ 
    function __construct(){ 
     echo 'class C constructed<br>'; 
    } 
    function sayHi(){ 
     echo 'Hi I am class: '.get_class(); 
    } 
} 
$wantedClass='B'; 
$finalObject = new createObject($wantedClass); 
$finalObject->$wantedClass->sayHi(); 

から
ダム

関連する問題