嘿,我有一个小测试用例设置如下:
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‘、标记和属性内容的对象)。为什么不能在构造函数内部返回对象?谢谢!
发布于 2010-11-14 06:17:41
构造函数将只返回对新创建的对象的引用。这是故意的--不然你怎么能得到新对象的引用呢?
但是,您可以在构造函数中创建一个对象属性,然后从外部访问它。这意味着您将在构造函数过程中创建对象,因此它将在正确的时间完成,而且还可以保证完成。
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'));
}
}
https://stackoverflow.com/questions/4177858
复制相似问题