2012-03-28 8 views
1

クラスで宣言されているインスタンスをグローバル化できますか?例えばクラスで宣言されているインスタンスをグローバル化できますか?

<?php 
    class Application 
    { 
     public $ioClass  = new Class(); 
     public $ioGlobalClass = new GlobalClass(); 

     public function __construct() 
     { 
      // constructor 
     } 
    } 

    class Class 
    { 
     public function __construct() 
     { 
      // constructor 
     } 

     public function doSomething() 
     { 
      // is this possible? 
      global $ioGlobalClass; 

      echo $ioGlobalClass->helloWorld(); 
     } 
    } 
?> 

は、だから私はグローバル$ ioGlobalClassを行うことができます。上記の例ではですか?

+0

なぜあなたもしたいですか?グローバルとシングルトンからはっきりとしています。ほとんどいつもより良い方法で両方を処理し、それらを使用して後でトラブルにあなたを取得します。 – liquorvicar

+0

その可能な場合は、ちょうど質問。その次には、非グローバル/非シングルトンのソリューションを試してみましたが、列車のパターンが壊れています。 – pascalvgemert

+0

@liquorvicarシングルトンは本質的に悪ではありません - 時間と場所があります(セッション管理クラスに最適ですインスタンス) - しかし、それらはあなたが間違ってやっていることを知っているアプリケーションの中で多くのクラス:: getInstance()呼び出しを見つけるならば、怠け者になる可能性があります:) – CD001

答えて

1

どこでもインスタンス化されていないとは限りません。あなたはシングルトンでより多くの運を持っているかもしれません:

public static $ioGlobalClass = new GlobalClass() 

その後:

Application::$ioGlobalClass->helloWorld(); 
+0

これは私が信じている静的なものですか?上の例では、インスタンス化されています: 'public $ ioGlobalClass = new GlobalClass();' – pascalvgemert

+0

@pascalvgemert:すべてのグローバル変数は静的です。 – hakre

-1

あなたができることを確認:

<?php 
require_once('global_class.php'); 

class Application 
{ 
    public $ioGlobalClass; 

    public function __construct() 
    { 
     global $ioGlobalClass; 
     $this->ioGlobalClass = $ioGlobalClass;   
    } 
    ... 

そしてglobal_class.phpであなただけの書き込み:

<?php 
global $ioGlobalClass; 
$ioGlobalClass = new GlobalClass(); 
関連する問題