PHP - 构造函数不返回false
问题描述:
如何让下面的$foo
变量知道foo应该是false?PHP - 构造函数不返回false
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 :(
答
您无法从构造函数中返回值。你可以使用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
}
您还可以扩展例外。
答
构造函数不应该返回任何东西。
如果您在使用创建对象之前需要验证数据,则应该使用工厂类。
编辑:是的,异常也会做的伎俩,但你不应该在构造函数内有任何逻辑。它成为单元测试的痛苦。
你的意思是http://php.net/manual/en/language.exceptions.php?但不会显示一个PHP错误并停止脚本?我只想返回假... – Alex 2011-05-06 23:46:03
如果你“抓住”它,不是。从这一点你可以做任何你想做的事情。 – webbiedave 2011-05-06 23:47:13
然后你做错了。相反,你应该分配给定的变量,然后调用'if($ foo-> is_falid()){/ * do stuff * /}',并且停止滥用'die()'函数。 – 2011-05-06 23:48:24