我们知道,使用JavaScript创建匿名对象很容易,就像下面的代码一样: 通用标签

输出: 通用标签

在PHP的情况下可以应用相同的技术吗?我们可以在PHP中创建匿名对象吗?

有帮助吗?

解决方案

已经有好几年了,但是我认为我需要保持最新信息!


在php-7中,可以创建匿名类,因此您可以执行以下操作: 通用标签

您可以在RFC(已接受)中阅读有关此内容的更多信息: https://wiki.php.net/rfc/匿名类

但是我不知道它与Javscript的实现方式有多相似,因此它们可能是javascript和php中的匿名类之间的一些区别。

编辑:

根据发布的评论,这是当前手册的链接: http:// php。net / manual / en / language.oop5.anonymous.php

其他提示

在谈论对象时,“匿名”不是正确的术语。最好说“匿名类型的对象”,但这不适用于PHP。

PHP中的所有对象都有一个类。 “默认”类为 stdClass ,您可以通过这种方式创建对象: 通用标签

您还可以利用将数组强制转换为对象以获得更方便的语法: 通用标签

但是,建议将数组强制转换为对象可能会为那些无效PHP变量名称的数组键产生“有趣的”结果-例如,这是我的答案,它显示了键以数字开头时会发生什么。

是的,有可能!使用这个简单的 PHP匿名对象类。运作方式: 通用标签

当然,此对象是AnObj类的实例,因此它并不是真正的匿名对象,但可以像JavaScript一样在运行时定义方法。

直到最近,这都是我即时创建对象的方式。 通用标签

然后: 通用标签

但是现在我去: 通用标签

然后像以前一样: 通用标签

当然,如果您已经知道属性和值,则可以像前面提到的那样在内部设置它们: 通用标签

NB:我不知道它可以在哪个版本的PHP上运行,因此您需要注意这一点。但是我认为第一种方法(如果在构造时没有要设置的属性,这也很短)应该适用于所有具有json_encode / json_decode 的版本

如果您想模仿JavaScript,则可以创建一个类Object,从而获得相同的行为。当然,这已经不再是匿名的了,但是可以使用。 通用标签

这将输出元素2 。这是从有关PHP的评论:类和对象中被盗的。

将数组转换为对象: 通用标签

如果您要创建具有动态属性的对象(例如javascript中的对象),而没有收到未定义属性的警告,则可以在未为属性设置值的情况下 通用标签

在PHP的情况下可以应用相同的技术吗?

否-因为javascript使用原型或对象的直接声明-在PHP(以及许多其他OO语言)中,只能从类中创建对象。

问题就变成了-您可以创建一个匿名类吗?

同样,答案是否定的-您将如何在无法引用该类的情况下实例化该类?

对于想要递归对象的人: 通用标签

在PHP文档中,还有更多示例: 通用标签

$ obj1和$ obj3是相同的类型,但是$ obj1!== $ obj3。另外,这三个都将json_encode()转换为简单的JS对象{}: 通用标签

输出: 通用标签

https://www.php.net/manual/zh/language.types.object.php

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top