2016-06-16 4 views
-2

私は関数内でglobal $var;を使用する変数のグローバルスコープを定義していないPHPシステムを使用していますが、サーバー上では動作しますが、ローカルシステムでは動作しません。

これはPHPのスコープルールの変更ですか、これを許可する設定ですか?私のローカルシステムは、PHP 5.5.36を実行している、私はどのバージョンのサーバーが実行されているのか分からない。

編集:これは、サーバー

include_once("common.inc.php"); // this defines $physical_path 

class Admin extends AdminData 
{ 
    function Admin($admin_auth_id='') { 
     include_once($physical_path['DB_Access']. 'SubadminCommittee.php'); 
     // many more lines of code follow 
    } 
} 

これは5.5.36

include_once("common.inc.php"); // this defines $physical_path 

class Admin extends AdminData 
{ 
    function Admin($admin_auth_id='') { 
     global $physical_path; // why is this line not needed on server? 
     include_once($physical_path['DB_Access']. 'SubadminCommittee.php'); 
     // many more lines of code follow 
    } 
} 
+2

コードサンプルください。私たちはこれに関する曖昧な記述に基づいて何も言えません。 – deceze

+0

@decezeコード例を追加しましたが、残念ながらサーバーからこれを再現することはできません。単純な例を作成する場所はありません。私はこのシステムを作りませんでした。 –

答えて

1

変数$physical_pathがしますないを実行しているローカルPHP上で動作する上で動作するコードサンプル

を追加機能の中でglobalを使用しないで利用できます。これはPHPのバージョンやその種類の違いではありませんが、PHPのバージョン間で違いはないスコープの単純な事実です。

$physical_path['DB_Access']nullと評価され、無視する警告が表示されます。

include_once('SubadminCommittee.php'); 

をそして、この相対パスルックアップが原因現在の作業ディレクトリがありますどのようにスクリプトが呼び出されて、何にサーバ上で動作します:include_onceラインは、そのためだけに評価されます。あなたのローカルサーバ上では、これはあなたの作業ディレクトリが異なるか、PHPのPATH値が異なって設定されているためには機能しません。

+0

私はサーバー上にテストクラスをセットアップし、$ physical_path変数がnullであることを確認しました。予想通り。その変数は他の多くのものに使用されるので、グローバルを追加するか、ファクトリまたはシングルトンで置き換える必要があります。 –

+1

あなたは 'global'を使わない方がよいでしょう。その代わりに、依存性はすべてのクラスのコンストラクタに値を注入します。 – deceze

+0

私はグローバルなvarで膨大なデータの配列以外のものを使用していましたが、これは古いPHPの方法です。おそらくそれを引数として渡したりシングルトンを提供したり、Symfonyを使ってシステムを構築してDIをさせたりしました。 –

関連する問題