Php 构造函数返回一个对象,而不是一个值

Php 构造函数返回一个对象,而不是一个值,php,object,constructor,return,Php,Object,Constructor,Return,为什么构造函数返回对象而不是返回值(布尔值) 构造函数只能返回对象的新实例。 您可以尝试使用静态函数调用来调用构造函数并返回false或新对象。构造函数:您做得不对 按照他们的名字做:构造一个对象的新实例。因此,构造函数返回的唯一有意义的东西就是该对象的实例。请注意,您几乎不会看到带有显式return语句1的构造函数 完成我认为您想要做的事情的更干净的方法是使用: 1他们是被允许的,因此可能有一个令人信服的理由。只是现在想不起来。构造函数的返回值被new操作符忽略。new操作符将始终返回一个对象

为什么构造函数返回对象而不是返回值(布尔值)


构造函数只能返回对象的新实例。 您可以尝试使用静态函数调用来调用构造函数并返回false或新对象。

构造函数:您做得不对

按照他们的名字做:构造一个对象的新实例。因此,构造函数返回的唯一有意义的东西就是该对象的实例。请注意,您几乎不会看到带有显式
return
语句1的构造函数

完成我认为您想要做的事情的更干净的方法是使用:


1他们是被允许的,因此可能有一个令人信服的理由。只是现在想不起来。

构造函数的返回值被
new
操作符忽略。
new
操作符将始终返回一个对象。当有类似代码时

class A {
    function __construct() {
        return 1;
    }
 }
 class B extends A {
     function __construct() {
         var_dump(parent::__construct());
     }
 }
 new B();
您可以看到构造函数有一个返回值。当然,编写这样的代码毫无意义

为了处理构造函数中的错误,必须使用异常。另一种方法是某种工厂方法

class C {
    private function __construct() { }
    private function init() {
        if (something_goes_wrong()) {
            return false;
        }
     }

     public static createInstance() {
         $retval = new self;
         if (!$retval->init()) {
             return false;
         }
         return $retval;
     }
}

那为什么他们允许退货呢?这个问题的第一个答案会帮助你
class A {
    function __construct() {
        return 1;
    }
 }
 class B extends A {
     function __construct() {
         var_dump(parent::__construct());
     }
 }
 new B();
class C {
    private function __construct() { }
    private function init() {
        if (something_goes_wrong()) {
            return false;
        }
     }

     public static createInstance() {
         $retval = new self;
         if (!$retval->init()) {
             return false;
         }
         return $retval;
     }
}