具有空返回的构造函数

时间:2014-04-04 23:27:02

标签: php oop

我理解为什么constuctor中不应该有返回值,因为它不会返回任何值。

但是我仍然在互联网上的很多剧本中看到了这一点,我还没有设法找到答案,这让我有一段时间了。如果有人愿意解释我,我会真的很赞成。

我所参考的代码:

function __construct() {

    return;
}

2 个答案:

答案 0 :(得分:2)

实际上,您可以(不会发生任何错误)使用return方法中的__construct关键字,但是(您不会)这些关键字无用且无法返回任何东西。

__construct方法不会创建对象实例

不正确的是,构造函数创建了对象,它是创建对象实例并返回对象的new关键字。所以,当我们使用这样的东西时:

$obj = new SomeClass;

然后PHP创建对象返回对象实例。如果此类包含任何constructor方法,则在创建该对象实例后,PHP将调用此方法。所以,你可以想象,类似的东西:

class SomeClass {
    public $prop = null;
    public function init() {
        $this->prop = 'SomeValue';
    }
}

现在创建对象并手动调用init方法

$obj = new SomeClass;
$obj->init();

我们创建了SomeClass的实例,并手动调用了init方法,但在__construct方法PHP的情况下,在创建该对象后自动调用该方法。因此,我们不必手动将值设置为prop属性。

因此,在调用__construct方法之前,创建对象实例而不创建对象实例,__construct方法无法被PHP调用,因为{{ 1}}指的是已经创建的当前对象,如果对象未初始化,那么我们如何调用:

$this

public function __construct() { $this->prop = 'SomeValue'; // $this refers to current object } 关键字始终返回对象实例:

让我们看看这个例子:

new

现在检查一下:

class SomeClass {
    public $prop = null;
    public function __construct() {
        $this->prop = 'SomeValue';
        return $this->prop; // won't work
    }

    public function getProp() { ...  }
}

如果我们能够从构造函数返回一个值,那么我们如何使用像$obj = new SomeClass; 之类的东西来使用对象实例,因为逻辑上它将包含$obj->getProp()而不是对象引用/标识符,所以它有意义SomeValue不允许从PHP方法返回任何内容,因为这个魔术方法在创建对象后自动调用,我们使用__construct关键字来创建对象实例通过new关键字返回给我们(变量),如果我们从new方法返回任何内容,它会被__construct阻止,并且只返回创建对象的实例我们没有明确地抛出异常。

  

要创建类的实例,必须使用new关键字。一个   除非对象具有构造函数,否则将始终创建对象   定义为在错误时抛出异常。参考:PHP Manual

虽然可以使用PHP中的return但是例如没有意义,请查看:

__constructor

也许,你可以这样做(仅举例):

class SomeClass {

    public function __construct() {
        return 'SomeValue'; // won't work
        // or blank return
        return;
    }
}

现在试试这个:

class SomeClass {

    public function __construct() {
        if('some condition does not met then ...') return;
        $this->prop = 'Prop is set';
    }

    public function doSomething(){
        return $this->prop ? $this->prop : 'Sorry! Prop is set.';
}
}

如果我们只是在$obj = new SomeClass; echo $obj->doSomething(); 的第二行之前返回,则该属性不会被设置,否则属性将被设置,constructor方法将输出doSomething。这可能不是一个好方法,但对于该示例,我认为这可能是一个有效的代码,其中return将停止执行其余代码。但这不是一个好主意,可能不是必需的,但为了示例我可以考虑使用return,否则不需要在构造函数中使用Prop is set关键字,如果有人使用它那么它可能是个人风格的选择,或者我不知道为什么。

答案 1 :(得分:0)

这通常表明执行不力。构造函数"返回"只不过是它自己的一个实例。