0

我有一些页面,如 a.php、b.php、c.php 每个 php 文件都有以下构造函数。

var database;
function __construct() {
     $database = $this->router->database;
}

我想做的是:

function __construct() {
     $this->router->construct();
}

因此,我的路由器中的construct() 函数应该创建一个$database 变量,并为其分配“$this->router->database”。我应该能够 $database->query() 无需在我的控制器中进行任何其他更改。

我怎样才能做到这一点?它可能有一个非常基本的回复,但我现在很困惑,甚至在考虑 eval()。

任何帮助将不胜感激。

4

2 回答 2

1

我对您实际上要完成的工作有点模糊,但听起来您正在尝试消除所有这些页面的重复构造函数。如果是这种情况,那么您可以创建一个父类并放入适当的代码,然后从父类继承每个其他页面。

class PageParent { 

  var $database;

  function __construct() {    
    $database = $this->router->database; 
  }

}

你的其他文件只需要

class Page extends PageParent
{
  function __construct() {
    /* Call parent class's constructor first... */
    parent::__construct();

    /* then add additional code here */

  }

}
于 2012-09-07T01:52:32.713 回答
0

我不确定你想要什么。您说这些是页面,但如果您使用的是构造函数,那么您正在查看类。如果是这种情况,那么您似乎也希望您的类具有路由器类的属性,并且能够在您的类中运行该构造函数来执行路由器构造函数所做的任何事情。

如果是这种情况,您真正想要做的是扩展路由器类。如果您不知道,如果一个类扩展了另一个类,它会自动继承父类(即您正在扩展的类)的所有属性和方法(即变量和函数),并允许您添加新的。如果一个属性或方法被设置为受保护或公共,你甚至可以用你自己的属性覆盖它们(尽管你最好知道你在做什么,否则你会得到令人讨厌的结果。)

所以一个例子可能是这样的:

class my_class extends router
{
    private $blah;
    // and so on; these can be accessed by using $this->blah in any function you like
    public function __construct()
    {
        // Your custom code, if any, goes here
        parent::__construct();
    }
}

要记住的一件事:如果您要扩展的类是“最终”类,则不能扩展它,因此无论如何您都可能不走运。

为了更详细地分析面向对象编程(又名“OOP”)的工作原理,PHP 文档实际上非常详尽且相对容易理解。

希望这可以帮助!

于 2012-09-07T01:50:19.290 回答