2016-12-31 43 views
1

我有這樣的代碼

class View 
{ 
    const DEFAULT_VIEWS_DIRECTORY = $_SERVER["DOCUMENT_ROOT"] . "views/"; 
} 

,但是,它給了我

Parse error: Parse error: syntax error, unexpected '$_SERVER' (T_VARIABLE) in C:\xampp\htdocs\classes\View.class.php on line 17

我查了manual語法錯誤,它說

The value must be a constant expression, not (for example) a variable, a property, or a function call.

沒有任何變通做什麼我想要 ?,因爲我在消費類這個數值嚴重,且以此爲常會讓更多漂亮

回答

1

正如你注意到,表達式不允許作爲類固定值類,但它不會阻止你啓動默認視圖目錄一次,並用它在不同的場合:

class View 
{ 
    private $defaultViewDirectory; 

    public function __construct() 
    { 
     $this->defaultViewDirectory = $_SERVER["DOCUMENT_ROOT"] . "views/"; 
    } 

    public function getDefaultViewDirectory() 
    { 
     return $this->defaultViewDirectory; 
    } 
} 

或者你可以實現像一個Singleton模式:

class View 
{ 
    private $defaultViewDirectory; 

    private function initDefaultViewDirectory() 
    { 
     $this->defaultViewDirectory = $_SERVER["DOCUMENT_ROOT"] . "views/"; 
    } 

    public function getDefaultViewDirectory() 
    { 
     if (is_null($this->defaultViewDirectory)) { 
      $this->initDefaultViewDirectory(); 
     } 
     return $this->defaultViewDirectory; 
    } 
} 

或者,如果你需要一個靜態訪問:

class StaticView 
{ 
    private static $defaultViewDirectory; 

    private static function initDefaultViewDirectory() 
    { 
     self::$defaultViewDirectory = $_SERVER["DOCUMENT_ROOT"] . "views/"; 
    } 

    public static function getDefaultViewDirectory() 
    { 
     if (is_null(self::$defaultViewDirectory)) { 
      self::initDefaultViewDirectory(); 
     } 
     return self::$defaultViewDirectory; 
    } 
} 

所以,你可以調用StaticView::getDefaultViewDirectory()

+0

感謝。這很有幫助。但不幸的是我需要在靜態方法中使用常量,所以像你這樣的實例變量不會在靜態方法內參考。我投了你的答案,但我不能接受它,因爲它沒有解決我的問題。非常感謝您的寶貴時間。 –

+0

公平的:)感謝您的投票,我已經更新了答案,以演示靜態訪問以及;) – Ali

+0

實際上看看[最好的解決方法從表達式創建一個PHP類常量?](http:///stackoverflow.com/questions/18079131/best-workaround-to-create-a-php-class-constant-from-an-expression) – Ali