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

科技   2025-01-01 07:30   湖南  

 

以下是一些PHP只读属性改变游戏规则的特性的实例探索:

数据封装与安全性提升

在用户管理系统中,用户的关键信息如姓名和邮箱等通常不希望被随意修改。定义一个User类如下:

class User {
    public readonly string $username;
    public readonly string $email;

    public function __construct(string $usernamestring $email{
        $this->username = $username;
        $this->email = $email;
    }
}

当创建用户对象并将其注册到系统中后,如$user = new User('alice', 'alice@example.com');,在后续的业务逻辑代码中,无论是在代码内部不小心的误操作,还是外部恶意的修改尝试,都无法修改用户的姓名和邮箱等只读属性,确保了用户数据的安全性和完整性。

符合业务规则和逻辑一致性

以电商系统中的Product类为例,商品的名称和价格在创建商品实例后通常不应该随意变动,否则会导致业务逻辑混乱,比如购物车计算总价、订单记录等环节都会出现问题。代码如下:

class Product {
    public readonly string $name;
    public readonly float $price;

    public function __construct(string $namefloat $price{
        $this->name = $name;
        $this->price = $price;
    }
}

在购物车计算总价的过程中,由于商品类的价格属性是只读的,能确保使用的是商品创建时设定的正确价格,保证了整个业务逻辑按照既定规则执行,维持了逻辑的一致性,避免了因属性随意修改带来的各种错误和混乱情况。如:

class ShoppingCart {
    private $products = [];

    public function addProduct(Product $product{
        $this->products[] = $product;
    }

    public function calculateTotal({
        $total = 0;
        foreach ($this->products as $product) {
            $total += $product->price;
        }
        return $total;
    }
}

$cart = new ShoppingCart();
$product1 = new Product('phone'599.99);
$product2 = new Product('headphones'99.99);
$cart->addProduct($product1);
$cart->addProduct($product2);
echo $cart->calculateTotal(); 

便于代码维护和理解

在一个复杂的项目中有很多不同功能的类,其中一些类包含配置相关的属性,将这些配置属性定义为只读属性,如数据库配置类:

class DatabaseConfig {
    public readonly string $host;
    public readonly string $username;
    public readonly string $password;
    public readonly string $databaseName;

    public function __construct($host$username$password$databaseName{
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
        $this->databaseName = $databaseName;
    }
}

开发人员看到DatabaseConfig类中的这些只读属性,就清楚知道它们是数据库的配置参数,是固定的、不能随意修改的值,在整个项目中只要按照只读的规则去使用这些属性就可以,使得代码的维护和理解更加方便快捷。如$dbConfig = new DatabaseConfig('localhost', 'admin','secret','my_database');,在后续代码中,只要使用$dbConfig->host等属性获取配置信息即可,不用担心配置被误改。

 


精英博客探索
关注热点,传递正能量。
 最新文章