爲什麼不能正常工作?爲什麼我不能在php對象中使用常量?
define("STR_TEST", "qwerty");
class Test
{
public $arrTest = array(
"test"=>"Bla bla bla ".STR_TEST
);
}
$objTest = new Test();
print($objTest->arrTest["test"]);
爲什麼不能正常工作?爲什麼我不能在php對象中使用常量?
define("STR_TEST", "qwerty");
class Test
{
public $arrTest = array(
"test"=>"Bla bla bla ".STR_TEST
);
}
$objTest = new Test();
print($objTest->arrTest["test"]);
只能在使用簡單的值property declaration:
[中]聲明可能包括初始化,但初始化必須是一個恆定值 - 也就是說,它必須能夠在編譯時進行評估,並且不能依賴運行時信息進行評估。
尤其是在這一點上不允許連接運算符。如果你想與從其他派生的值來啓動它,你需要做的是,在構造函數:
class Test {
public $arrTest;
public function __construct() {
$this->arrTest = array(
"test" => "Bla bla bla ".STR_TEST
);
}
}
可以完美使用常量類成員聲明
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;
也就是說,上面引用的文檔在這一點上是錯誤的。
你能夠在類本身中初始化常量嗎?然後就這樣做
class Cheese {
const WHOA = 'me';
public eat()
{
return Cheese::WHOA;
}
}