PHP 7新特性四 Typed properties (属性类型化)
随着标量类型和返回类型的引入,PHP 7 大大增强了 PHP 类型系统的功能。 但是,目前无法为类属性声明类型,从而迫使开发人员使用 getter 和 setter 方法来强制执行类型契约。 这要求了不必要的样板,使得使用不那么符合人体工程学的方式,并且对性能有不好影响。 此 RFC 通过引入对类属性类型声明的支持来解决该问题。
//此前 class User { /** @var int $id */ private $id; /** @var string $name */ private $name; public function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } public function getId(): int { return $this->id; } public function setId(int $id): void { $this->id = $id; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } } //现在 class User { public int $id; public string $name; public function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } }
不牺牲任何类型安全的情况下。
与先前提案的主要区别
先前 已提出类型属性,但当时已被拒绝。新提案有两个主要差异,我们认为这些差异解决了之前提案的大部分问题:
支持静态属性的类型。由于实现问题,以前的RFC中未包含对静态属性类型的支持,从而导致语言不一致。在新提议下,可以将类型声明添加到静态属性,其语义与普通属性相同。
支持对类型属性的引用。之前的提案不允许引用类型属性,因为如果通过引用间接修改属性,则难以强制执行类型。新提议允许引用类型属性,并且即使通过引用进行修改,也会强制执行声明的类型。
PHP 7新特性四 Typed properties (属性类型化):https://www.yzdlm.com/php/14.html
作者:大脸猫 分类: 大脸猫PHP博客
上一篇:程序员年度最佳“毒鸡汤” 下一篇:程序员的心灵毒鸡汤
评论
乖,登录后才可以留言!
QQ一键登录