Php访问全局类

时间:2013-02-19 19:45:55

标签: php

这让我疯了(喝淫秽咖啡和整夜工作没有帮助)我想从申请中的任何地方获得课程。我在我的索引页面中实例化了Class(它自动加载我的lib / classes)但似乎我无法获得它的全局访问权限。这是我的索引页面:

function __autoload($class)
{
    require LIBS . $class .'.php';
}

$Core = new Core($server, $user, $pass, $db);

这自动加载我的Lib / classes然后我实例化我的Core(这是我的Lib / core.php中的自动加载)

然后在我的Core中我创建通常的数据库连接,获取并检查URL以及我在哪里实例化几个类(自动加载)我创建一个__construct,这就是我要实例化模板的地方类。我希望能够在我的任何控制器和模型中访问该类的全局访问权限。

class Core {

    function __construct(DATABASE VARIABLES IN HERE)
    {
        $this->Template = new Template();
    }

}

好的,所以我认为我可以通过在我的父模型和父控制器中执行以下操作来访问模板对象:

class Controller
{

    public $Core;

    function __construct()
    {
        global $Core;
        $this->Core = &$Core;
    }
}

Controller是父扩展我的所有控制器,因此我假设我可以写$this->Core->Template->get_data();来访问模板方法?这似乎抛出一个错误。

我确定它一定是我忽略的一些简单的东西,如果有人能给我一个很棒的牌。这个问题让我发疯了。

我的__construct中的子控制器中的旁注也构建了父parent::_construct();

错误似乎是Notice: Trying to get property of non-objectFatal error: Call to a member function get_data() on a non-object

2 个答案:

答案 0 :(得分:0)

class Controller
{

    public $Core;

    function __construct(Core $core)
    {
        $this->Core = $core;
    }
}

class ControllerChild extends Controller {
    function __construct(Core $core, $someOtherStuff){
      parent::__construct($core) ;
      //And your $this->Core will be inherited, because it has public access
    }
}
  • 注意:在处理对象时,您不必使用&符号。对象通过引用自动传递。

答案 1 :(得分:0)

您可以使Core成为singleton并实现静态函数以接收指向该对象的指针。

define ('USER', 'username');
define ('PASS', 'password');
define ('DSN', 'dsn');

class Core {

  private static $hInstance; 

  public static function getInstance() { 
    if (!(self::$hInstance instanceof Core)) {
        self::$hInstance = new Core(USER, PASS, DSN);
    } 

    return self::$hInstance; 
  }

  public function __construct($user, $pass, $dsn) {
     echo 'constructed';
  }
 }

然后在您的控制器中,您可以使用:

$core = Core::getInstance();

哪个应输出constructed

修改

更新以演示如何通过静态函数w / output构建。