2010-11-14 41 views
1

嘿,我有一個小的測試案例設置如下:在類構造函數中返回SimpleXML對象 - 爲什麼它不起作用?

class T { 
    public function __construct(){ 
     $obj = new SimpleXMLElement(file_get_contents('vote.xml')); 
     return $obj; 
    } 
} 

$vv=new T; 
var_dump($vv); 

$vv轉儲平等相待,在這種情況下,object(T)#1 (0) { } - 換句話說,不是預期的輸出

當我返回對象在一個單獨的函數,不過,這樣的:

class T { 
    public function stackOverflow(){ 
     $obj = new SimpleXMLElement(file_get_contents('vote.xml')); // or simplexml_load_file 
     return $obj; 
    } 
} 

$vv=new T; 
$vv = $vv->stackOverflow(); 
var_dump($vv); 

輸出爲預期(含有的「vote.xml」的內容,標籤和attribu對象TES)。爲什麼我不能返回構造函數中的對象?謝謝!

回答

3

構造函數只會返回對新創建對象的引用。這是故意的 - 你會如何獲得對新對象的引用?

但是,您可以在構造函數中創建一個對象屬性,然後從外部訪問它。這意味着你可以在構造過程中創建對象,這樣可以在正確的時間完成,而且可以保證完成。

class T { 
    public $sxml; 

    public function __construct(){ 
     $this->sxml = new SimpleXMLElement(file_get_contents('vote.xml')); 
    } 
} 

$vv=new T; 
var_dump($vv->sxml); 

當然,如果你不這樣做需要引用了新的對象,你可以使用一個靜態方法來代替,而從不使用構造函數:

class T { 
    public static function sxml() { 
     return new SimpleXMLElement(file_get_contents('vote.xml')); 
    } 
} 
相關問題