【问题标题】:Is it possible to define a constant using a PHP stdClass object?是否可以使用 PHP stdClass 对象定义常量?
【发布时间】:2020-10-05 17:24:24
【问题描述】:

PHP.net 类常量页面没有提到任何关于此的内容,我也没有找到其他有答案的问题。

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

<?php
$foo = new stdClass();

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

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

如果不可能,为什么不呢?

提前致谢。

【问题讨论】:

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

标签: php stdclass


【解决方案1】:

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

它们不是变量。

您的语法实际上尝试将属性/变量添加到对象,然后将其用作常量,这就是您尝试访问 Undefined class constant 'stdClass::pi' 时遇到语法错误的原因

如果您出于某种原因尝试这样做,除了学术之外,您可能需要创建一个新问题来解释您想要什么以及为什么。 PHP 有一些有趣的特性(例如匿名类)可能允许您采取某种解决方法,尽管显而易见的传统解决方案只是定义一个基类并利用继承来继承事物。

接口也可以定义常量,因此您可以通过定义一个带有您想要定义的常量的接口并让类实现该接口来与各种类共享常量。

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2013-05-12
    • 2015-12-16
    • 2014-09-19
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多