Php/OOP如何避免同一类的实例从其他对象访问私有属性/方法

tax*_*ala 6 php oop

我知道大多数OOP语言(如果不是全部)的私有可见性在类的基础上定义隐私,即同一类的不同实例可以访问彼此的私有属性/方法.

我想阻止这一点,我想知道什么是最好的设计/实现,以便在不产生负面性能影响的情况下做到这一点.

例如,我知道我可以实现AOP并使用符号,但这会导致性能下降,因为languange引擎必须创建类的反射并检查注释.所以,基本上,我的问题是,避免同一个类的实例访问彼此的私有方法/属性的最佳方法是什么?

例:

class Product
{
    private $_prize;
    public function __construct($prize)
    {
        $this->_prize = $prize;
    }

    public function calculateDiscount(Product $extraProduct)
    {
        $extraProduct->_prize = 0; //How to avoid this?
    }
}

$productA = new Product(10);
$productB = new Product(25);
$productA->calculateDiscount($productB);
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 5

只是不要编写访问其他实体的私有内容的代码,就这样。可见度调节器可以帮助您避免搬起石头砸自己的脚。它们不是锁和钥匙。您仍然可以通过多种方式“规避”“访问保护”。做一个负责任的成年人,不要修改属性,除非你在$this->它前面写了一个。