为什么 php 将空字节添加到私有和受保护的 属性 名称中?
Why php adds null bytes to private and protected property names?
我是 PHP 世界的新手,正在向 php.net 学习。我知道当将对象转换为数组时,当 ClassName 或 asterisk key (*) 被添加到数组键中私有和受保护的 属性 名称之前。
但我的问题是 WHY php 添加空字节 WHAT 是什么原因?
谁能用通俗易懂的话告诉我。
例子会有很大帮助。
谢谢
private
/protected
属性的要点是您不应该从 class 本身之外访问它们。这不是安全措施或类似的措施,它是为了在代码的不同部分之间执行合同。当您将某物标记为 private
/protected
时,您是在明确声明该东西不适合一般 public 消费,不应将任何外部代码耦合到它。
这主要是给你自己和其他开发者的一个提醒,如果你不遵守那个标记,最坏的情况下会给你一个轻拍;无论如何,这都不是铁定的保护。有很多方法可以解决这个问题,例如使用反射。 但是,如果太容易访问这些私有部分,开发人员可能会左右为难,否定整个观点。
由于在将对象转换为数组时这些属性包含在数组中,至少由于添加了 NUL
字节,如何直接访问它们并不是很明显。如果您花时间弄清楚如何访问它们,希望您真的知道自己在做什么。
TL;DR:(我相信)这是一种最低限度的尝试,试图强制执行一些最低限度的编码标准,并且不让新手在弄清楚什么是数组转换后违反所有 OOP 原则。
我是 PHP 世界的新手,正在向 php.net 学习。我知道当将对象转换为数组时,当 ClassName 或 asterisk key (*) 被添加到数组键中私有和受保护的 属性 名称之前。
但我的问题是 WHY php 添加空字节 WHAT 是什么原因?
谁能用通俗易懂的话告诉我。
例子会有很大帮助。
谢谢
private
/protected
属性的要点是您不应该从 class 本身之外访问它们。这不是安全措施或类似的措施,它是为了在代码的不同部分之间执行合同。当您将某物标记为 private
/protected
时,您是在明确声明该东西不适合一般 public 消费,不应将任何外部代码耦合到它。
这主要是给你自己和其他开发者的一个提醒,如果你不遵守那个标记,最坏的情况下会给你一个轻拍;无论如何,这都不是铁定的保护。有很多方法可以解决这个问题,例如使用反射。 但是,如果太容易访问这些私有部分,开发人员可能会左右为难,否定整个观点。
由于在将对象转换为数组时这些属性包含在数组中,至少由于添加了 NUL
字节,如何直接访问它们并不是很明显。如果您花时间弄清楚如何访问它们,希望您真的知道自己在做什么。
TL;DR:(我相信)这是一种最低限度的尝试,试图强制执行一些最低限度的编码标准,并且不让新手在弄清楚什么是数组转换后违反所有 OOP 原则。