嘿,我设置了一个小测试用例如下:
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',标签和属性的内容的对象)。为什么我不能在构造函数内返回对象?谢谢!
答案 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'));
}
}