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 
} 

您还可以扩展例外。

+0

你的意思是http://php.net/manual/en/language.exceptions.php?但不会显示一个PHP错误并停止脚本?我只想返回假... – Alex 2011-05-06 23:46:03

+0

如果你“抓住”它,不是。从这一点你可以做任何你想做的事情。 – webbiedave 2011-05-06 23:47:13

+0

然后你做错了。相反,你应该分配给定的变量,然后调用'if($ foo-> is_falid()){/ * do stuff * /}',并且停止滥用'die()'函数。 – 2011-05-06 23:48:24

构造函数不应该返回任何东西。

如果您在使用创建对象之前需要验证数据,则应该使用工厂类。

编辑:是的,异常也会做的伎俩,但你不应该在构造函数内有任何逻辑。它成为单元测试的痛苦。

+0

什么是工厂类,我该如何使用它? :D – Alex 2011-05-06 23:44:47

+0

@Alex,观看[这个视频](http://www.youtube.com/watch?v=4F72VULWFvc),这可能解释一些它(是的,这个例子是在Java中,但它是一个关于理论的讨论而不是“如何写你好世界”)。 – 2011-05-06 23:51:24

+0

谢谢,我稍后再看:D – Alex 2011-05-06 23:56:52