2017-01-23 136 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']变量,因为它可以被篡改。至少在可能的情况下检查传入值是否在期望值列表中。