打破构造函数

Ema*_*sev 6 php oop

有没有办法阻止在其构造函数中创建对象,以便:

$object = new Foo();
echo $object; // outputs: NULL
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 14

不,不可能; 该new关键字总是返回指定的,不管你尝试从构造函数返回什么类的一个实例.这是因为在调用构造函数时,PHP已经为新对象分配了内存.换句话说,该对象已经存在于该点(否则,根本没有对象可以在其上调用构造函数).

您可能会引发错误或从构造函数中抛出异常,并相应地处理它们.

class Foo {
    public function __construct() {
        throw new Exception('Could not finish constructing');
    }
}

try {
    $object = new Foo();
} catch (Exception $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

  • @Gordon:是的,我错了,谢谢; 它是实际创建实例的`new`关键字; 在分配这个对象的过程中,PHP调用`__construct()`(如果它存在). (3认同)