PHP - 公众可见度不太安全吗?

bzi*_*zim 2 php security visibility

我曾经问过一位老师为什么习惯将财产的可见性设定为私人或受保护的人.她回答我说这比公开更安全,但我对这个答案并不是很有信心.所以,我想知道,即使我确保最终用户无法操纵我的类,公共财产对于属性真的不太安全吗?为什么?

lon*_*day 7

不,这绝对是垃圾.它没有多少或更不安全.

如果用户想要,他们可以访问对象上的受保护/私有属性:

class Car {
    protected $engine = 'V8';
}

$reflector = new ReflectionClass('Car');
$engineProperty = $reflector->getProperty('engine');
$engineProperty->setAccessible(true);

$maserati = new Car;
echo $engineProperty->getValue($maserati); // echoes "V8"
$engineProperty->setValue($maserati, 'I4');
echo $engineProperty->getValue($maserati); // echoes "I4"
Run Code Online (Sandbox Code Playgroud)

因此,可以证明,没有安全上的好处.

好处是它通过标记类为其设计的类与哪些函数和属性进行交互来帮助最终用户.如果他们愿意,开发人员可以完全改变类的内部,但是调用它的代码不必改变.如果他们真的想要,那么班级的用户可以用它来捣乱,但如果事情不起作用,那就是他们的问题!