我可能刚刚碰到其中一个"wtf PHP?" 时刻.
根据PHP文档 [Class member variables] are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration.
我认为这意味着属性必须遵循与变量相同的命名约定.也就是说,它不能以整数开头.以下代码确实会导致解析错误:
class Foo {
public $1st_property;
}
Run Code Online (Sandbox Code Playgroud)
文档还说明何时将数组转换为对象: Arrays convert to an object with properties named by keys, and corresponding values.
所以我试过了
$a['1st_key'] = "Hello, World!";
$o = (object)$a;
print_r($o);
Run Code Online (Sandbox Code Playgroud)
而且1st_key确实是一种财产
stdClass Object
(
[1st_key] => Hello, World!
)
要点:属性名称以数字开头,该数字不是有效的变量名称(当然,我们可以访问该属性$o->{'1st_key'}).但是,当一个数组被强制转换为一个对象时,无效的变量名可以成为属性名吗?
这是由演员完成的.从技术上讲,这些名字并非无效.
您需要区别于如何编写(定义)这些名称.如果你写:
$1
Run Code Online (Sandbox Code Playgroud)
这是一个无效的标签.但如果你写
${1}
Run Code Online (Sandbox Code Playgroud)
该标签无效.
这个问题也可能对您有意义:PHP中的数组到对象和对象到数组 - 有趣的行为.
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |