我可能刚刚遇到了其中一个“wtf PHP?”时刻。
根据 PHP 文档 [类成员变量] 是通过使用关键字 public、protected 或 private 之一定义的,后跟普通变量声明。
我认为这意味着属性必须遵守与变量相同的命名约定。即,它不能以整数开头。以下代码确实会导致解析错误:
class Foo {
public $1st_property;
}
文档还说明了将数组转换为对象时:Arrays convert to an object with properties named by keys, and corresponding values.
所以我试过了
$a['1st_key'] = "Hello, World!";
$o = (object)$a;
print_r($o);
而1st_key
确实是一个属性
stdClass Object ( [1st_key] => Hello, World! )
要点:属性名称以数字开头,这不是有效的变量名称(当然,我们可以使用 $o->{'1st_key'}
访问该属性)。但是,当一个数组被转换为一个对象时,为什么无效的变量名会变成属性名呢?
最佳答案
这是由 Actor 完成的。从技术上讲,这些名称并非无效。
您需要区分如何编写(定义)这些名称。如果你写:
$1
这是一个无效的标签。但是如果你写
${1}
该标签不是无效的。
您可能也对这个问题感兴趣:Array to Object and Object to Array in PHP - interesting behaviour。
关于php - 将数组转换为对象允许无效的属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053097/