为什么构造函数返回对象,而不是返回值(布尔值)?
class A{
function __construct($stuff){
return ($this->load($stuff) !== false);
}
}
$aaa = new A($stuff);
if(!$aaa) die('error'); // never happens
print_r($aaa); // it's a object...
构造函数:你做错了
构造函数顾名思义:构造一个对象的新实例。因此,构造函数返回的唯一有意义的东西就是该对象的实例。注意,您几乎不会看到带有显式return
语句1的构造函数。
要完成我认为你想做的事情,更简洁的方法是使用异常:
class A {
function __construct($stuff) {
if ($this->load($stuff) === false) {
throw new Exception('Unable to load');
}
}
}
try {
$aaa = new A($stuff);
} catch (Exception $e) {
die('error' . $e->getMessage());
}
1它们是允许的,所以可能有一个令人信服的原因。只是现在想不起来。
构造函数只能返回一个对象的新实例。您可以尝试使用静态函数调用,调用构造函数并返回false或新对象。
构造函数的返回值被new
操作符忽略。new
操作符总是返回一个对象。当有像
class A {
function __construct() {
return 1;
}
}
class B extends A {
function __construct() {
var_dump(parent::__construct());
}
}
new B();
可以看到构造函数有一个返回值。当然,编写这样的代码没有什么意义。
在构造函数中处理错误必须使用异常。另一种方法是某种工厂方法。
class C {
private function __construct() { }
private function init() {
if (something_goes_wrong()) {
return false;
}
}
public static createInstance() {
$retval = new self;
if (!$retval->init()) {
return false;
}
return $retval;
}
}