- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是从 PHP manual 上读到的:
If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side. This can result in some unexpected behaviour:
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());The above will appear to have two keys named 'AA', although one of them is actually named '\0A\0A'.
this这样的字体,我不是很明白。
什么是整数属性?
“这些前置值的两边都有空字节。这会导致一些意外行为”是什么意思?
和“?上面的内容看起来有两个名为“AA”的键,尽管其中一个实际上名为“\0A\0A””是什么意思
最佳答案
这是指名称为十进制整数的字符串表示形式的属性。例如:
$o = new stdClass;
$o->{"123"} = 'foo'; // create a new integer property
echo $o->{"123"}, PHP_EOL; // verify it's there
$a = (array)$o; // convert to array
echo $a['123']; // OOPS! E_NOTICE: Undefined offset!
var_dump(array_keys($a)); // even though the key appears to be there!
print_r($a); // the value appears to be there too!
一般来说,PHP 中的整数属性不应该靠近 if you value your sanity。 .
null
包围的前置值对于 private
和 protected
属性,生成的数组键将包含不可打印的字符 "\0"
。这可能很有用(因为该字符对于属性名称是不合法的,您可以使用此信息来确定属性的可见性),但如果您不希望它在那里,它也可能是一个麻烦。示例:
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'
}
$a = (array) new B();
// The array appears to have the keys "BA", "AA" and "AA" (twice!)
print_r(array_keys($a));
// But in reality, the 1st and 3rd keys contain NULL bytes:
print_r(array_map('bin2hex', array_keys($a)));
您可以像这样从数组键中提取可见性信息:
$a = (array) new B();
foreach ($a as $k => $v) {
$parts = explode(chr(0), $k);
if (count($parts) == 1) {
echo 'public $'.$parts[0].PHP_EOL;
}
else if ($parts[1] == "*") {
echo 'protected $'.$parts[2].PHP_EOL;
}
else {
echo 'private '.$parts[1].'::$'.$parts[2].PHP_EOL;
}
}
关于php - 什么是整数属性以及 '\0A\0A' 的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547187/
我是一名优秀的程序员,十分优秀!