php - 将数组转换为对象允许无效的属性名称?

标签 php oop

我可能刚刚遇到了其中一个“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/

相关文章:

php - 拉维尔 4 : validate checkbox at least one

java - 如何使用第三方类对象作为 HashMap 键?

c++ - C++ 中的类成员隐私和 header

php - 继承和方法参数 PHP

php - 接口(interface)可以扩展其他类吗?

c++ - std::vector 类与非成员函数(连同 typedef)

javascript - 在目录中导入整个文件

php - 如何访问虚拟主机站点的MySql数据库

php - 如何在mysql数据库中插入json数据的特定元素

php - 如何在字符串中查找时间戳