为什么我不能在php对象中使用常量?

时间:2010-03-13 12:46:31

标签: php object

为什么这不起作用?

define("STR_TEST", "qwerty");

class Test
{
    public $arrTest = array(
        "test"=>"Bla bla bla ".STR_TEST
    );
}

$objTest = new Test();

print($objTest->arrTest["test"]);

3 个答案:

答案 0 :(得分:8)

您可以在类成员声明中完美地使用常量

define('SOME', 12345);

class A {
    public $x = SOME; // works
}

$o = new A;
echo $o->x; 

问题是成员声明不允许任何类型的表达式:

class B {
    public $x = 1 + 1; // no
    public $y = foo(); // no
    public $z = CONST . CONST; // no
}

请注意,这种限制纯粹是语法上的,也就是说,无论出于何种原因,php解析器都不接受那里的表达式。在成员声明中很可能有与运行时相关的代码:

define('IP', $_SERVER['REMOTE_ADDR']);

class B {
    public $ip = IP;
}

$o = new B;
echo $o->ip;

也就是说,上面引用的文档在这一点上是错误的。

答案 1 :(得分:6)

您只能在property declaration中使用简单值:

  

[The]声明可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。

特别是此时不允许连接运算符。如果要使用从其他值派生的值启动它,则需要在构造函数中执行此操作:

class Test {
    public $arrTest;

    public function __construct() {
        $this->arrTest = array(
            "test" => "Bla bla bla ".STR_TEST
        );
    }
}

答案 2 :(得分:2)

你能在课堂上初始化常数吗?然后就这样做

class Cheese {

    const WHOA = 'me';

    public eat ()
    {
        return Cheese::WHOA; 

    }

}