2012-03-28 72 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(); 
相关问题