2017-01-23 6 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()としてください。

だから、次のようになります。あなたが完全にそれとして、この$_SERVER['SERVER_NAME']変数を信用してはならないことを言及する価値があるかもしれません

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

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

またはinit()が代わりのように使用する必要があります改ざんされる可能性があります。可能であれば、入力値が期待値リストにあるかどうかを少なくとも確認してください。

関連する問題