2016-08-03 21 views
0

スクリプトのiamの開発でvarスコープに問題があります。現在、私はすべてのメソッドを書き直す必要がありますが、誰かが正しい方向に向けるかどうかを確認できます。PHPのインクルードとクラスのスコープ

file1.php

<?php 
$db = new SystemDB(); 
include('file2.php'); 
someFile2Function(); 
?> 

file2.php

<?php 
function someFile2Function(){ 
    $db = new Database; 
    include('class.php'); 
    $class = new CustomClass(); 
    $class->someMethod(); 
} 
?> 

Class.phpと

<?php 
class CustomClass { 

    function someMethod(){ 
     global $db; <-- this var is the file1.php var and not the file2.php function var 
     // execute some query 
    } 

} 
?> 

私の問題は、使用しているクラス変数$ DB内にあるということです1つはfile1.phpにあり、もう1つはfile2.phpのsomeFile2Function()にはありません。

someFile2Function()で宣言されたvar $ dbを使用するglobal $ dbを使用する方法はありますか。

ありがとうございました。

+0

このクラスで必要とされるこの関数は、クラスでそのようglobals' '使用している場合ではなく、クラスから機能するためにfile2.phpに機能を移動します。それはカプセル化を完全に破壊する。それをparamとして 'someclass :: __ construct($ db)'に渡して、それをsomeclassのプロパティとして保持してください。 – RiggsFolly

+0

私は間違いだと知っています!私は、$ dbオブジェクトをコンストラクタに渡すために、すべてのクラスとメソッドを書き直す必要がないという方法があるかどうかを確認することを求めています。 – Galfau

答えて

0

@RiggsFollyとして、紛争の可能性があるため、クラス内でグローバル化することはお勧めできません。それをパラメータとして使用し、動的に変化し、それを呼び出すメソッド/オブジェクトに依存します。

function someMethod($db){ 
    var_dump($db); 
    } 

も唯一いけない

+0

私はクラスの関数スコープを使用しようとするのにfile2.php関数を作成しましたが、それはうまくいかないようです。 – Galfau

関連する問題