2010-11-14 135 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')); 
    } 
} 
相关问题