是否可以使用PHP stdClass对象定义常量?

是否可以使用PHP stdClass对象定义常量?,php,stdclass,Php,Stdclass,“类常量”页面没有提到这方面的任何内容,我也没有找到其他问题的答案 我很惊讶我找不到这个问题的答案,也许我看起来不够好,但是否可以为stdClass对象定义一个常量,如: <?php $foo = new stdClass(); #something magic here like: const $foo->pi = 3.14; #and then get access like: echo $foo::pi; 不,你不能。原因很简单。常量是在编译时创建的静态幂等值 它们不是变

“类常量”页面没有提到这方面的任何内容,我也没有找到其他问题的答案

我很惊讶我找不到这个问题的答案,也许我看起来不够好,但是否可以为stdClass对象定义一个常量,如:

<?php
$foo = new stdClass();

#something magic here like:
const $foo->pi = 3.14;

#and then get access like:
echo $foo::pi;

不,你不能。原因很简单。常量是在编译时创建的静态幂等值

它们不是变量

您的语法实际上试图将属性/变量添加到对象中,然后将其用作常量,这就是为什么在尝试访问未定义的类常量“stdClass::pi”时出现语法错误的原因。

如果你试图这样做是有原因的,除了学术上的原因,你可能想提出一个新的问题来解释你想要什么以及为什么。PHP有一些有趣的特性(例如匿名类),可能允许您进行某种变通,尽管传统的解决方案显然只是定义一个基类并利用继承来继承东西


接口还可以定义常量,因此您可以通过使用要定义的常量定义接口来与各种类共享常量,并让类实现接口。

为什么不使用常量变量创建类?通常它们应该是静态的,因为对象定义了一个具有变量属性的类的状态,而常量更基于类。我不知道你可以将常量变量分配给stdClass实例,我希望这样做的唯一原因是我使用stdClass而不是数组对变量进行分组,能够使用常量有时是有用的。实际上,我只是想知道这是否可能,但看起来似乎无法做到。了解这种“分组”意味着什么,以及为什么不使用普通类,或者,正如我在回答中所建议的,使用匿名类,将是一件有趣的事。实现接口的匿名类可能是您的一个解决方案,但我也想知道为什么不使用您事先设计的类。我想说我不是PHP专家,而且直到现在我还没有遇到匿名类,我可能使用的stdClass不正确,我可能应该研究创建所需对象的其他方法。从下面的答案中回答您的问题@gview这更像是一个学术问题,而不是其他问题,尽管了解使用stdClass进行我将要做的事情的局限性是有帮助的。这是一个完全公平的问题。如果您来自javascript,那么PHP更像是一种传统的OOP语言(不是基于原型的),尽管它允许您动态地向对象添加属性,这可能会让人认为它更像javascript而不是javascript。