2017-01-23 116 views
1

我有一個常變量類,但我得到這個錯誤

syntax error, unexpected '$_SERVER' (T_VARIABLE) 

這裏是我的代碼

<?php 

namespace common\models; 

class EConstant 
{ 

    .... 
    const HomeUrl = 'http://'.$_SERVER['SERVER_NAME'].'/someweb/'; 
    .... 

} 

有什麼錯我的代碼?

+0

您不能將$ _SERVER ['SERVER_NAME']指定爲常量。該值必須是常量表達式,而不是(例如)變量,屬性或函數調用。請參閱:http://php.net/manual/en/language.oop5.constants.php – mith

回答

2

你不能做到這一點,而不是嘗試此,

<?php 

class EConstant 
{ 

    protected $homeURL; 

    public function __construct() { 
     $this->homeURL = 'http://'.$_SERVER['SERVER_NAME'].'/someweb/'; 
    } 
} 
1

Saravanan Sampathkumar的答案是正確的,但不完整。

作爲指南指出:

當延長從yii\base\Componentyii\base\Object類,建議您遵循以下約定:
- 如果你重寫構造函數,指定一個$config參數作爲構造函數的最後一個參數,然後將此參數傳遞給父構造函數。
- 始終在覆蓋構造函數末尾調用父構造函數。
- 如果覆蓋yii\base\Object::init()方法,請確保在init()方法的開頭調用父實現init()

所以它應該是:

public function __construct($config) 
{ 
    $this->homeURL = 'http://' . $_SERVER['SERVER_NAME'] . '/someweb/'; 
    parent::__construct($config); 
} 

init()應該代替,如:

public function init() 
{ 
    parent::init(); 
    $this->homeURL = 'http://' . $_SERVER['SERVER_NAME'] . '/someweb/'; 
} 

這可能是值得一提的是,你不應該完全信任這$_SERVER['SERVER_NAME']變量,因爲它可以被篡改。至少在可能的情況下檢查傳入值是否在期望值列表中。

相關問題