PHP7支持类属性的类型暗示吗?
我的意思是,不只是setters/getters美元,还有房产本身.
比如:
class Foo {
/**
*
* @var Bar
*/
public $bar : Bar;
}
$fooInstance = new Foo();
$fooInstance->bar = new NotBar(); //Error
PHP7支持类属性的类型暗示吗?
我的意思是,不只是setters/getters美元,还有房产本身.
比如:
class Foo {
/**
*
* @var Bar
*/
public $bar : Bar;
}
$fooInstance = new Foo();
$fooInstance->bar = new NotBar(); //Error
PHP 7.4 will support typed properties如下所示:
class Person
{
public string $name;
public DateTimeImmutable $dateOfBirth;
}
PHP7.3及更早版本不支持此功能,但也有一些替代方案.
您可以创建只能通过具有类型声明的getter和setter访问的私有属性:
class Person
{
private $name;
public function getName(): string {
return $this->name;
}
public function setName(string $newName) {
$this->name = $newName;
}
}
您还可以创建一个公共属性并使用docblock向阅读代码并使用IDE的用户提供类型信息,但这不提供运行时类型判断:
class Person
{
/**
* @var string
*/
public $name;
}
实际上,您可以将getter和setter与docblock结合起来.
如果你更喜欢冒险,你可以用__get
, __set
, __isset
and __unset
magic methods做一个假的属性,然后自己判断类型.不过,我不确定我是否会推荐它.