2011-03-06 15 views
3

クラスのほとんどの関数で、外部のPHPファイルのいくつかの変数にアクセスする必要があります。私はPHP - クラスのすべての関数でグローバル変数にアクセスする

class test{ 

function a(){ 
    global $myglobalvar ; 
    .. 
    .. 
    } 

function b(){ 
    global $myglobalvar ; 
    .. 
    .. 
    } 

function c(){ 
    global $myglobalvar ; 
    .. 
    .. 
    } 

} 

iは各関数に宣言しなくても、クラスのすべての機能に$ myglobalvarにアクセスできる方法はあります(と、それは正常に動作します)方法を以下にアクセスしていますか?私はクラスのコンストラクタで一度だけ宣言することでこれを行うことができますが、それを行う方法はわかりません。 ありがとうございました。あなたは(あまりglobalたい)コンストラクタでグローバル変数を参照を作成することができます

+7

これはPHPがあなたに「このことをやめて、あなたが間違っている(tm)」と言っている方法です。そして、PHPは良いコードについての熱狂的な言語の1つではありません。 – delnan

+1

@delnan:最初の部分は+1、2番目の部分は-2です。 – markus

+0

オブジェクトレベルの変数を作成する –

答えて

14
class test{ 

private $myglobalvar; 

public function __construct($var){ 
    $this->myglobalvar = $var; 
} 

function a(){ 
    echo $this->myglobalvar; 
} 

function b(){ 
    echo $this->myglobalvar; 
} 

function c(){ 
    echo $this->myglobalvar; 
} 

} 

$test = new test("something"); 
$test->a(); // echos something 
$test->b(); // echos something 
$test->c(); // echos something 
+0

グローバル宣言がありません – RDL

+3

@RDLこのデザインのポイントは、グローバルがコンストラクタを介して渡されるため、オブジェクトのスコープが適切に絶縁され、特定の名前付けに依存しないことです。外部リソース。再利用を促進する。 –

4

その後、それぞれの方法で $this->myglobalvarを介してグローバルにaceessを可能
class test{ 

    function __construct() { 
     $this->myglobalvar = & $GLOBALS["myglobalvar"]; 

+3

それはうまくいくでしょうが、なぜ人々のコードにそのような匂いを教えるのですか? – Gordon

2

このケースについて詳しくお知りになりましたら、問題を解決するためのより良い方法をお伝えすることができます。可能な限り、グローバルは避けるべきです。あなたは本当に変数について話していますか、それとも、サーバー全体のラウンドトリップ中に同じままである構成オプションに似ていますか?その場合、設定オプションのように扱い、それをレジストリオブジェクト(シングルトン)に格納することが考えられます。

関連する問題