从php对象父级获取变量

时间:2013-11-01 14:12:53

标签: php variables object

我正试图跳向面向对象的php。我正在从头开始构建自己的MVC框架,因为我喜欢完全控制,我认为这是一个很好的学习练习。

这是我用来根据名称路由到不同文件夹的路由器(我在索引文件中有自动加载器功能):

class controller_router
{
    public $controller;
    public $action;
    public $id;
    public $freetext;

    //set the url path variables
    public function __construct($controller,$action,$id,$freetext)
    {
        $this->controller = $controller;
        $this->action = $action;
        $this->id = $id;
        $this->freetext = $freetext;
    }

    //instantiate the main controller according to url
    public function instantiateMainController()
    {
        $controller_name = 'controller_'.$this->controller;
        $controller = new $controller_name;
    }
}

我的博客控制器看起来像这样(只是测试我是否可以获得操作):

class controller_blog
{   
    public function __construct()
    {
        echo $this->action;
    }
}

我的问题是 - 如何从父级(路由器)获取操作变量?

命令echo $this->action;似乎不起作用!

此外,您可以建议的任何其他改进?我是新手!

3 个答案:

答案 0 :(得分:3)

您应该将对象传递给新对象。

$controller = new $controller_name($this);

//...

class controller_blog
{   
    public function __construct($router)
    {
        echo $router->action;
    }
}

答案 1 :(得分:1)

在代码中有几种方法可以做到 - 但首先你需要记住 。这意味着 - 你需要意识到,你的应用程序的结构是什么。每个实体有什么结构?每个实体如何在课堂上实施?实体如何相关以及如何在代码中实现?

例如,其中一个选项可以从父类继承您的操作。但首先,您需要让controller_blog controller_router孩子成为class controller_blog extends controller_router { public function __construct() { echo $this->action; } } 。这可能有意义 - 但它们是否以这种方式相关 - 取决于你自己决定。你可以这样做:

class controller_blog
{   
    public $action;

    public function __construct(controller_router $router)
    {
        $this->action = $router->action;
    }
}

- 你将有一个课程将扩展另一个课程。

但他们可能不是这样相关的吗?然后,您需要将依赖项注入您的博客控制器。例如

{{1}}

- 既然你没有指明你的结构,你需要自己决定什么更正确。

答案 2 :(得分:0)

controller_router中的变量作为controller_blog的构造函数的参数传递给controller_blog