2012-03-28 24 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 2012-03-28 15:40:00

+0

它只是一個問題,如果它可能的話。接下來,我嘗試了一種非全局/非單例解決方案,它可以解決火車殘骸模式。 – pascalvgemert 2012-03-28 15:44:36

+0

@liquorvicar單身人士並非天生就是邪惡的 - 有時間和地點給他們(理想的會議管理班實例) - 但它們可能導致你變得懶惰......如果你在整個應用程序中發現大量的Class :: getInstance()調用,你知道你做錯了:) – CD001 2012-03-28 15:57:49

回答

1

我想如果它沒有在任何地方實例化,我不期待。你可能有更多的運氣與單:

public static $ioGlobalClass = new GlobalClass() 

則:

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

這是一個靜態我相信?在我上面的例子中,它被實例化了: 'public $ ioGlobalClass = new GlobalClass();' – pascalvgemert 2012-03-28 15:40:27

+0

@pascalvgemert:所有的全局變量都是靜態的。 – hakre 2012-05-10 10:42:43

-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(); 
相關問題