php 7是否支持类属性的类型提示?
我的意思是,不仅仅是setter/getter,还有属性本身。
类似于:
class Foo {
/**
*
* @var Bar
*/
public $bar : Bar;
}
$fooInstance = new Foo();
$fooInstance->bar = new NotBar(); //Error
发布于 2016-05-17 05:28:46
PHP7.4这样的will support typed properties:
class Person
{
public string $name;
public DateTimeImmutable $dateOfBirth;
}
PHP 7.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做一个假的属性,然后自己检查类型。不过,我不确定是否会推荐它。
发布于 2016-05-16 21:41:32
您可以使用setter
class Bar {
public $val;
}
class Foo {
/**
*
* @var Bar
*/
private $bar;
/**
* @return Bar
*/
public function getBar()
{
return $this->bar;
}
/**
* @param Bar $bar
*/
public function setBar(Bar $bar)
{
$this->bar = $bar;
}
}
$fooInstance = new Foo();
// $fooInstance->bar = new NotBar(); //Error
$fooInstance->setBar($fooInstance);
输出:
TypeError: Argument 1 passed to Foo::setBar() must be an instance of Bar, instance of Foo given, called in ...
https://stackoverflow.com/questions/37254695
复制相似问题