PHP类中无法使用"const"和"define"。

3

我在这个问题上苦思冥想。虽然我刚开始接触PHP,但是这个问题应该很基础,我就是搞不清楚问题所在。以下代码片段仅供参考:

class LG_Activity_Processor {
// Activity Types
const STATUS_DRAFT = 'draft';
const STATUS_PUBLISH = 'publish';
...
private $STATUS_FUTURE = 'future';
define ("STATUS_PRIVATE" , 'private');

我最初打算只使用"const"构造,因为变量在运行时之前已经完全定义,而且我认为这种语法比那个丑陋的"define"更漂亮。但问题是,尽管const的定义没有错误,但每当我稍后在类中引用常量时,就会收到以下错误消息:

PHP注意:使用未定义常量STATUS_PUBLISH-假定为'STATUS_PUBLISH'

嗯?为了明确起见,这是我用来引用"const"的语法:

$core_fields ['post_status'] = STATUS_PUBLISH;

我甚至尝试了:

$core_fields ['post_status'] = $this->STATUS_PUBLISH;

没有爱。我陷入了绝望的状态,最终尝试了“define”。调用语法相同,但我将定义语法更改为上面所示的“STATUS_PRIVATE”。这使事情变得更糟,因为现在我在定义行上遇到了致命错误,看起来像这样:

PHP Parse error:  syntax error, unexpected T_STRING, expecting T_FUNCTION

我放弃了。最终,我将变量定义为私有变量(就像STATUS_FUTURE示例中那样),然后将其称为:

$core_fields ['post_status'] = $this->STATUS_PUBLISH;

这个功能的作用和你预期的一样,但是我感觉我被欺骗了,没有用正确的方式实现。有什么想法让我的代码变完美吗?


在类中不要使用define() - 你需要的是const。在类外部使用ClassName::CONST_NAME,在同一类中只需使用self::CONST_NAME - halfer
1个回答

6

1
如果仅在类本身的范围内使用,则只需使用 self::STATUS_DRAFT - Wesley Murch
@Madmartigan 这仅在您在类内部时才可用。它在这里可以工作,但使用完整的类名将在任何地方都起作用。 - Mitch Dempsey
我通过看到代码 $this->STATUS_PUBLISH,认为他是在类的范围内工作。 - Wesley Murch
我正在类本身的范围内工作。一旦我今天早上把狗放下,我会尝试self::缩写。我敢肯定我已经尝试过完全限定的LG_Acitivity_Processor::,但也许我没有。无论如何,感谢指点,我希望在接下来的一个小时左右解决这个问题。 - ken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接