为什么 php 将空字节添加到私有和受保护的 属性 名称中?

Why php adds null bytes to private and protected property names?

我是 PHP 世界的新手,正在向 php.net 学习。我知道当将对象转换为数组时,当 ClassNameasterisk key (*) 被添加到数组键中私有和受保护的 属性 名称之前。

但我的问题是 WHY php 添加空字节 WHAT 是什么原因?

谁能用通俗易懂的话告诉我。

例子会有很大帮助。

谢谢

private/protected 属性的要点是您不应该从 class 本身之外访问它们。这不是安全措施或类似的措施,它是为了在代码的不同部分之间执行合同。当您将某物标​​记为 private/protected 时,您是在明确声明该东西不适合一般 public 消费,不应将任何外部代码耦合到它。

这主要是给你自己和其他开发者的一个提醒,如果你不遵守那个标记,最坏的情况下会给你一个轻拍;无论如何,这都不是铁定的保护。有很多方法可以解决这个问题,例如使用反射。 但是,如果太容易访问这些私有部分,开发人员可能会左右为难,否定整个观点。

由于在将对象转换为数组时这些属性包含在数组中,至少由于添加了 NUL 字节,如何直接访问它们并不是很明显。如果您花时间弄清楚如何访问它们,希望您真的知道自己在做什么。

TL;DR:(我相信)这是一种最低限度的尝试,试图强制执行一些最低限度的编码标准,并且不让新手在弄清楚什么是数组转换后违反所有 OOP 原则。