PHP - 构造函数不返回false

时间:2011-05-06 23:38:58

标签: php class object constructor

我怎样才能让下面的$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 :(

3 个答案:

答案 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();