为什么这不起作用?
define("STR_TEST", "qwerty");
class Test
{
public $arrTest = array(
"test"=>"Bla bla bla ".STR_TEST
);
}
$objTest = new Test();
print($objTest->arrTest["test"]);
答案 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;
}
}