2012-08-28 65 views
0

好的,這已經是我一段時間以來的個人煩惱了。假設我有一堂課。PHP 5.3首先動態實例化一個類,而不先設置變量

class One { 
    public $class = 'Two'; 
    public $member = 'member'; 
} 

class Two { 
    public $member = 'Hey there'; 

    function __construct() { 
     print 'Created'; 
    } 
} 

$one = new One(); 

// case 1: works 
$two_class = $one->class; 
$two = new $two_class(); 

// case 2: fails 
$two = new {$one->class}(); 

有什麼辦法實例從一個類memeber類沒有首先在分配名稱給一個變量?每當我想從一個屬性動態地創建一個類時,我就會死在裏面,而且我必須首先填充一個變量。任何人都可以在技術上向我解釋爲什麼這在以下情況下不起作用:

print $two->{$one->method} 

會很高興地打印'你好'嗎?

+0

從技術上講,你並不需要同樣的事情會發生()開始新的課程。另外,嘗試將它分配給一個變量$ new_one = $ one-> class; $ two = new $ new_one(); – wesside

+0

我總是不鼓勵你做這樣的事情。只是因爲你無法確定給定的課程是否具有你認爲它具有的功能......這是一個維護恐怖!相反,只是創建一個函數,基於字符串的值創建一個對象,如函數GetMeMyClass($ input){switch($ input){case'One':return new One(); case'Two':return new Two();默認:死(「在GetMeMyClass中給出的無效類」); }} – bkwint

+0

@wes,那是我的問題。 – thepearson

回答

9
$two = new $one->class(); 

演示:http://codepad.org/64iCiWn2

但你會得到很大的麻煩,如果$one->class()是功能 - 它可能會產生混淆,但如果如果$two_class成爲功能

+0

太棒了。謝謝。 – thepearson

相關問題