什么是整数属性,'\ 0A\0A'的含义是什么?

Yis*_*ang 6 php

我从PHP手册中读到了这个:

如果将对象转换为数组,则结果是一个数组,其元素是对象的属性.键是成员变量名,有一些值得注意的例外:整数属性是不可访问的 ; 私有变量的类名前置于变量名; 受保护的变量在变量名前面加上'*'.这些前置值在任一侧都有空字节. 这可能会导致一些意外行为:

class A {
    private $A; // This will become '\0A\0A' }

class B extends A {
    private $A; // This will become '\0B\0A'
    public $AA; // This will become 'AA' }

var_dump((array) new B()); 
Run Code Online (Sandbox Code Playgroud)

上面看起来有两个名为'AA'的键,虽然其中一个 实际命名为'\ 0A\0A'.

我不太明白与像字样那些部分的含义.

什么是整数属性?

"这些前置值在两侧都有空字节.这可能会导致一些意外行为"的含义是什么?

"上面的内容似乎有两个名为'AA'的键,虽然其中一个实际命名为'\ 0A\0A'"

Ja͢*_*͢ck 4

通过使用此代码,您可以深入了解新的数组键。

$x = (array)new B();

foreach ($x as $key => $value) {
    echo bin2hex($key), ' = ', $value, PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)

它显示了键值的十六进制表示,从中您可以更清楚地看到发生了什么:

00420041 = 
4141 = 
00410041 = 
Run Code Online (Sandbox Code Playgroud)

第一个属性 () 的数组键B::A被编码为"\x00B\x00A"ie chr(0) . 'B' . chr(0) . 'A',因为它的可见性是 私有的B

第二个属性 ( B::AA) 被编码为 simple 'AA',因为它的可见性是公共的。

第三个属性 ( A::A) 与第一个属性非常相似,被编码为"\x00A\x00A",因为它的可见性是 私有的A

我不完全确定整数属性是什么。我不会担心数字属性,因为它们的使用可以忽略不计并且不鼓励(这可能就是为什么没有太多提及这个“功能”。