Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何为构造函数指定void返回类型_Php_Oop_Php 7_Php 7.1_Php 8 - Fatal编程技术网

Php 如何为构造函数指定void返回类型

Php 如何为构造函数指定void返回类型,php,oop,php-7,php-7.1,php-8,Php,Oop,Php 7,Php 7.1,Php 8,为了保持一致性,我从PHP7.1开始就对所有方法进行了指定,包括像magic之类的方法,甚至当隐式返回类型为voidlike时,也使用: 当我尝试同样的方法时,就像这样: class a { function __construct() : void {} function __destruct() : void {} function __clone() : void {} } /** * @return void (implicit) */ PHP产生致命错误s: Con

为了保持一致性,我从PHP7.1开始就对所有方法进行了指定,包括像magic之类的方法,甚至当隐式返回类型为
void
like时,也使用:

当我尝试同样的方法时,就像这样:

class a {
  function __construct() : void {}
  function __destruct() : void {}
  function __clone() : void {}
}
/**
 * @return void (implicit)
 */
PHP产生
致命错误
s:

Constructor a::__construct() cannot declare a return type
Destructor a::__destruct() cannot declare a return type
Clone method a::__clone() cannot declare a return type
我现在唯一能做的就是在docblock中指定隐式返回类型,如下所示:

class a {
  function __construct() : void {}
  function __destruct() : void {}
  function __clone() : void {}
}
/**
 * @return void (implicit)
 */
这让我感到困惑,因为其他预定义方法确实支持显式返回类型。我在中或中找不到有关此偏差的任何信息

如何为构造函数和析构函数指定返回类型
void
?如果在PHP7中不可能,那么在PHP8中是否可能?

构造函数和析构函数的概念出现在PHP5中。它们不会显式返回任何内容。它们没有任何返回类型


按照构造函数的定义,它用于创建作为类实例的对象。它用于初始化类的对象,因为构造函数声明看起来就像一个没有返回类型的方法声明。

构造函数和析构函数不(也不能)返回任何东西,为什么它们支持它?这将是毫无意义的。构造函数不会显式返回任何内容。它们没有返回类型。构造函数返回其类的类型。这是从PHP7.4(或者可能是7.3)开始工作的。构造函数返回
void
as。创建对象后,将调用构造函数来初始化对象。我的观点是,您不能自己指定返回类型
void
,这与泛型方法声明不一致。这就像不能在公共方法上指定
public
关键字一样,因为默认情况下是公共的,并且您唯一的选项将是
protected
private
@MagnusEriksson。为了语法简洁,应该支持它,正如Swantra Kumar发现的这个错误报告中提到的。这样想:为什么神奇的函数
\uuuu construct()
\uuu unserialize()
有任何不同?这是另一个例子,说明为什么我要指定构造函数和析构函数的返回类型,即
void
。您可以在提供的文档链接中查找它。人们倾向于认为构造函数返回一个指向实例的指针,但这不是真的。@Code4R7签名是
void
,但不能显式声明。三年前有一个bug报告为,php团队将其标记为“不是bug”,提到“面向对象语言中的构造函数没有返回类型”。感谢您找到这个bug报告。这是PHP语法中的一个不一致之处,应该予以修复。报告将设计决策标记为“非bug”,这意味着创建PHP的人在可预见的未来不会解决它,这是我们必须面对的问题。构造函数不会“返回类的当前实例”。构造函数不返回任何内容。这是一个例子。创建实例的关键字是
new
。事实上,如果能够像文档一样使用有效的PHP语法来表达,那就太好了。