我理解为什么constuctor中不应该有返回值,因为它不会返回任何值。
但是我仍然在互联网上的很多剧本中看到了这一点,我还没有设法找到答案,这让我有一段时间了。如果有人愿意解释我,我会真的很赞成。
我所参考的代码:
function __construct() {
return;
}
答案 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)
这通常表明执行不力。构造函数"返回"只不过是它自己的一个实例。