翼度科技»论坛 编程开发 PHP 查看内容

实例探索PHP只读属性改变游戏规则的特性

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
正文

只读属性是一个改变游戏规则的新特性。它允许您声明只能在初始化期间设置且此后无法修改的属性。
只读属性就像是代码中的恒久不变的守护者,确保一切保持原样。它们可以用于各种目的,例如:

  • 定义常量
  • 防止意外修改敏感数据
  • 提高代码的安全性和可靠性

php 只读属性

如果您还没有使用过只读属性,我强烈建议您尝试一下。它们可以为您的代码带来许多好处。
在 PHP 8中,只读属性为我们的类带来了一种新的可能性。它们允许您声明只能在初始化期间设置且此后无法修改的属性。这就像在您的代码中添加了一块坚固不变的石头,确保一切保持原样。
  1. class UserProfile {
  2.     public readonly string $username;
  3.     public function __construct(string $username) {
  4.         $this->username = $username;
  5.     }
  6. }
复制代码
在此示例中,
  1. $username
复制代码
是只读属性。一旦在构造函数中设置,它的值就保持不变。

提示和技巧:


1. 使用默认值初始化

只读属性只能在初始化期间设置。如果您无法保证默认值或初始值,那么可以使只读属性可为空。例如:
  1. phpCopy codeclass UserProfile {
  2.     public readonly string $username;public readonly string $username;
  3.     public readonly ?string $bio;
  4.     public function __construct(string $username, ?string $bio = null) {
  5.         $this->username = $username;
  6.         $this->bio = $bio;
  7.     }
  8. }
复制代码
在这种情况下,
  1. $bio
复制代码
属性可以为空。

2. 实现不变性

只读属性可以用于实现不变性。一旦设置,该属性就无法更改,从而确保数据完整性。例如:
  1. class ImmutableDate {
  2.     public readonly DateTimeImmutable $date;
  3.     public function __construct(DateTimeImmutable $date) {
  4.         $this->date = $date;
  5.     }
  6. }
复制代码
在这种情况下,
  1. $date
复制代码
属性是不可变的。

3. 确保一致性

只读属性可以用于计算基于其他属性的值,确保对象的一致性。例如:
  1. class Circle {
  2.     public readonly float $radius;
  3.     public readonly float $area;

  4.     public function __construct(float $radius) {
  5.         $this->radius = $radius;
  6.         $this->area = $this->calculateArea();
  7.     }
  8.     private function calculateArea(): float {
  9.         return pi() * $this->radius * $this->radius;
  10.     }
  11. }
复制代码
在这种情况下,
  1. $area
复制代码
属性是基于
  1. $radius
复制代码
属性计算的。一旦
  1. $radius
复制代码
属性被设置,
  1. $area
复制代码
属性的值也就确定了。

意外的惊喜:只读属性的 Getter 和 Setter

只读属性允许您声明只能在初始化期间设置且此后无法修改的属性。这似乎与
  1. getter
复制代码
  1. setter
复制代码
的概念相矛盾。
然而,事实并非如此。即使是只读属性也可以有
  1. getter
复制代码
  1. setter
复制代码
。这可能听起来有点奇怪,但它实际上是具有许多优势的功能。
让我们看一个简单的示例:
  1. class MyClass {
  2.     public readonly string $immutableProperty;
  3.     public function __construct(string $value) {
  4.         $this->immutableProperty = $value;
  5.     }
  6.     public function getImmutableProperty(): string {
  7.         return $this->immutableProperty;
  8.     }
  9.     public function setImmutableProperty(string $newValue): void {
  10.         $this->immutableProperty = $newValue;
  11.     }
  12. }
复制代码
尽管
  1. $immutableProperty
复制代码
是只读属性,但我们仍然可以使用
  1. getter
复制代码
来访问它的值。我们也可以使用
  1. setter
复制代码
来修改它的值。
这可能看起来有点奇怪,但它确实是可能的。只读属性只是意味着我们无法在对象的生命周期内修改其值。但我们仍然可以通过
  1. getter
复制代码
  1. setter
复制代码
来访问和修改它的值。
只读属性就像是一位可靠的朋友,一旦您将其设置为某个值,它就会保持不变。这意味着您的代码更加稳定,不会出现意外的变化。
以上就是实例探索PHP只读属性改变游戏规则的特性的详细内容,更多关于PHP只读属性的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/program/313393nbi.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具