我有一个常变量类,但我得到这个错误
syntax error, unexpected '$_SERVER' (T_VARIABLE)
这里是我的代码
<?php
namespace common\models;
class EConstant
{
....
const HomeUrl = 'http://'.$_SERVER['SERVER_NAME'].'/someweb/';
....
}
有什么错我的代码?
我有一个常变量类,但我得到这个错误
syntax error, unexpected '$_SERVER' (T_VARIABLE)
这里是我的代码
<?php
namespace common\models;
class EConstant
{
....
const HomeUrl = 'http://'.$_SERVER['SERVER_NAME'].'/someweb/';
....
}
有什么错我的代码?
你不能做到这一点,而不是尝试此,
<?php
class EConstant
{
protected $homeURL;
public function __construct() {
$this->homeURL = 'http://'.$_SERVER['SERVER_NAME'].'/someweb/';
}
}
Saravanan Sampathkumar的答案是正确的,但不完整。
作为指南指出:
当延长从
yii\base\Component
或yii\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']
变量,因为它可以被篡改。至少在可能的情况下检查传入值是否在期望值列表中。
您不能将$ _SERVER ['SERVER_NAME']指定为常量。该值必须是常量表达式,而不是(例如)变量,属性或函数调用。请参阅:http://php.net/manual/en/language.oop5.constants.php – mith