我怎样才能让下面的$foo
变量知道foo应该是假的?
class foo extends fooBase{
private
$stuff;
function __construct($something = false){
if(is_int($something)) $this->stuff = &getStuff($something);
else $this->stuff = $GLOBALS['something'];
if(!$this->stuff) return false;
}
}
$foo = new foo(435); // 435 does not exist
if(!$foo) die(); // <-- doesn't work :(
答案 0 :(得分:33)
您无法从构造函数返回值。您可以使用exceptions。
function __construct($something = false){
if(is_int($something)) $this->stuff = &getStuff($something);
else $this->stuff = $GLOBALS['something'];
if (!$this->stuff) {
throw new Exception('Foo Not Found');
}
}
在您的实例化代码中:
try {
$foo = new foo(435);
} catch (Exception $e) {
// handle exception
}
您还可以扩展例外。
答案 1 :(得分:4)
构造函数不应该返回任何内容。
如果在使用创建对象之前需要验证数据,则应使用工厂类。
编辑:是的,异常也可以做到这一点,但你不应该在构造函数中有任何逻辑。它变成了单元测试的痛苦。
答案 2 :(得分:1)
您可以尝试
<?php
function __construct($something = false){
$this->stuff = $something;
}
static function init($something = false){
$stuff = is_int($something) ? &getStuff($something) : $GLOBALS['something'];
return $stuff ? new self($stuff) : false;
}
$foo = foo::init(435); // 435 does not exist
if(!$foo) die();