-1

我有一些扩展 Loader 类的类。而那些在 Loader 类中声明的类,就像这样 -

class Loader
{   

    public $sql;
    public $logger;
    public $view;
    public $model;
    public $config;
    public $url_data;



    public function __construct()
    {
        $url_accepted = $_GET['url'];
        $this->config = $GLOBALS['config'];

        $database_connection = some array...
        $this->sql = new dbHandler($database_connection);

        $this->logger = new logger();

        $this->view = new view();
        $this->view->set_view($config['view']['view']);
        $this->model = new model();
        ...
        require_once("app/controllers/frame.php");

view 和 model 是扩展 Loader 的类,并且 frame 扩展了 Loader,但 frame 也扩展了。
出于某种原因,它会自行循环,直到 sql 有很多连接并且 php 内存不足,而 index.php 是唯一声明 Loader 的地方 -

require_once("app/includes/loader.php");

$loader = new Loader();

我不知道是什么问题,但我知道来源是视图和模型的声明。模型和视图都没有对 Loader 的引用,除了在“扩展 Loader”和使用 $this 访问 loader 值。

pastebin 上的代码 - http://pastebin.com/u/Yehonatan

有人可以帮我解决这个问题吗?

4

2 回答 2

1
class Loader
   {   
    public $sql;
    public $logger;
    public $view;
    public $model;
    public $config;
    public $url_data;



    public function __construct()
    {
        $url_accepted = $_GET['url'];
        $this->config = $GLOBALS['config'];

        $database_connection = some array...
        $this->sql = new dbHandler($database_connection);

        $this->logger = new logger();

        $this->view = new view();
        $this->view->set_view($config['view']['view']);
        $this->model = new model();
        ...
        require_once("app/controllers/frame.php");

还有一个问题,“扩展 Loader”,您是说您的模型和视图类扩展了 loader 吗?如果是这种情况,那么很明显它将经历递归。如果是这种情况,那么您将需要覆盖__construct()视图和模型中的 。

class View extends Loader 
{ 
   public function __construct() 
   { 
     // do something
   }
}

class Model extends Loader 
{
   public function __construct() 
   { 
     // do something
   }
}

我希望你明白原因,如果不是我很乐意解释。

于 2012-07-31T07:36:27.337 回答
1

模型和视图都没有对 Loader 的引用,除了在“扩展 Loader”和使用 $this 访问 loader 值。

如果这是网站

class Loader {
  // ...
  public function __construct() {
    // ...
    $this->view = new view();
    // ...
    $this->model = new model();
  }
}

class view extends Loader { 
  // ...
}

class model extends Loader {
  // ...
}

您需要覆盖__construct()方法。如果您不这样做,模型/视图类将使用__construct()创建模型/视图对象的 Loader 方法 ->递归

于 2012-07-31T07:22:22.930 回答