PHP 7.0, который является текущим минорный релиз на момент написания (+2016 -05-16), не поддерживает это. Были предприняты некоторые усилия в этом направлении (например, Typed Properties RFC, который был отклонен для PHP 7.1), но в настоящее время нет прямой поддержки.
В то же время есть несколько альтернатив.
Вы можете сделать частную собственность, которая доступна только через добытчиками и сеттеров, которые имеют объявление типа:
class Person
{
private $name;
public function getName(): string {
return $this->name;
}
public function setName(string $newName) {
$this->name = $newName;
}
}
Вы можете также сделать публичную собственность и использовать заголовочный блок для предоставления информации о типе людей, читающих код и с помощью IDE, но это не обеспечивает выполнения проверки типов:
class Person
{
/**
* @var string
*/
public $name;
}
и действительно, вы можете комбинировать методы получения и установку и заголовочный блок.
Если вы более предприимчивы, вы можете сделать фальшивое имущество с помощью __get
, __set
, __isset
and __unset
magic methods и сами проверить типы. Хотя я не уверен, рекомендую ли я это.
Не то, чтобы я знал. Однако, вообще говоря, * любые * ограничения на значение свойства должны выполняться через сеттер в любом случае. Так как сеттер может легко иметь typehint для аргумента «value», вам хорошо идти. –
Многие фреймворки используют атрибуты _protected_ (в основном для контроллеров). Для этих случаев, в частности, это было бы очень полезно. – CarlosCarucce