Как указать тип возвращаемого значения void для конструктора
Для единообразия я указываю типы возвращаемых значений, начиная с PHP 7.1, для всех методов, включая магические, такие как __toString
, и даже если неявный возвращаемый тип void
как с __unserialize()
:
class a {
function __toString() : string {}
function __unserialize ( array $data ) : void {}
function __wakeup() : void {}
}
Когда я пробую то же самое для конструкторов и деструкторов, например:
class a {
function __construct() : void {}
function __destruct() : void {}
function __clone() : void {}
}
PHP дает Fatal error
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
Единственное, что я могу сделать прямо сейчас, это указать неявный тип возвращаемого значения в док-блоке следующим образом:
/**
* @return void (implicit)
*/
Меня озадачивает, почему, потому что другие предопределенные методы действительно поддерживают явный тип возврата. Я не смог найти ничего об этом отклонении ни в документации, ни в RFC.
Как я могу указать возвращаемый тип void
для конструкторов и деструкторов? Если это невозможно в PHP 7, станет ли это возможным в PHP 8?
1 ответ
Концепция конструкторов и деструкторов была введена в PHP5. Они ничего не возвращают явно. У них нет возвращаемого типа.
Согласно определению конструктора, он используется при создании объекта, который является экземпляром класса. Он используется для инициализации объекта класса, поскольку объявление конструктора выглядит так же, как объявление метода, не имеющего возвращаемого типа.