不能在PHP类中使用“const”和“define”

时间:2012-04-30 22:57:20

标签: php

我正在把头发拉出来。非常新的PHP,但这是如此基本,我只是无法弄清问题在哪里。以下面的代码片段为例:

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

我原本打算只使用“const”结构,因为变量在运行时之前是完全定义的,我只是认为语法比丑陋的“定义”更漂亮。问题是,当 const 的定义没有出现错误时,每当我在类中稍后引用该常量时,我​​都会收到以下错误消息:

  

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

咦?为了清楚起见,这是我用来引用“const”的语法:

$core_fields ['post_status'] = STATUS_PUBLISH;

我甚至尝试过:

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

没有爱。然后我进入绝望状态并最终尝试“定义”。相同的调用语法,但我将定义语法更改为上面针对“STATUS_PRIVATE”所示的语法。这使得事情变得非常值得,因为我现在在定义行上出现致命错误,如下所示:

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

我放弃了。我最后只是将变量定义为私有变量(如STATUS_FUTURE示例中所示),然后将其称为:

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

这就像你期望的那样有效,但我忍不住觉得我被骗了以正确的方式去做。关于如何让我的代码重新整理的任何想法?

1 个答案:

答案 0 :(得分:6)

访问时应该LG_Activity_Processor::STATUS_DRAFT

看看PHP手册,它为您提供了清晰的示例。

http://php.net/manual/en/language.oop5.constants.php