在类构造函数中返回SimpleXML对象 - 为什么它不起作用?

时间:2010-11-14 14:11:40

标签: php xml 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',标签和属性的内容的对象)。为什么我不能在构造函数内返回对象?谢谢!

1 个答案:

答案 0 :(得分: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'));
    }
}