访问从对象转换的数组中的私有值

Joh*_*ith 3 php

我有这个小代码:

class A
{
    private $val  = 5;
}

$a = new A();
$obj = (array)$a;
echo '<pre>'; var_dump ($obj); echo '</pre>';
echo $obj['Aval']; // error!
Run Code Online (Sandbox Code Playgroud)

转储$ obj后,结果是:

array(1) {
  ["Aval"]=>
  int(5)
}
Run Code Online (Sandbox Code Playgroud)

但是用$ obj ['Aval']访问这个值; 触发错误 - 这是不可能的!

小智 8

如果您查看有关转换为数组文档,它会指出:

私有变量的类名前置于变量名; 受保护的变量在变量名前面加上'*'.这些前置值在任一侧都有空字节.

这意味着它并非A前奏,而是\0A\0.所以关键是"\0A\0val".