2010-03-13 84 views

回答

6

只能在使用簡單的值property declaration

[中]聲明可能包括初始化,但初始化必須是一個恆定值 - 也就是說,它必須能夠在編譯時進行評估,並且不能依賴運行時信息進行評估。

尤其是在這一點上不允許連接運算符。如果你想與從其他派生的值來啓動它,你需要做的是,在構造函數:

class Test { 
    public $arrTest; 

    public function __construct() { 
     $this->arrTest = array(
      "test" => "Bla bla bla ".STR_TEST 
     ); 
    } 
} 
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; 

也就是說,上面引用的文檔在這一點上是錯誤的。

2

你能夠在類本身中初始化常量嗎?然後就這樣做

class Cheese { 

    const WHOA = 'me'; 

    public eat() 
    { 
     return Cheese::WHOA; 

    } 

} 
相關問題