Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php对象父对象获取变量_Php_Variables_Object - Fatal编程技术网

从php对象父对象获取变量

从php对象父对象获取变量,php,variables,object,Php,Variables,Object,我正试图跳转到面向对象的php。我正在从头开始构建自己的MVC框架,因为我喜欢完全控制,我认为这是一个很好的学习练习 这是我的路由器,我使用它根据名称路由到不同的文件夹。我在索引文件中有自动加载功能: class controller_router { public $controller; public $action; public $id; public $freetext; //set the url path variables pub

我正试图跳转到面向对象的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;似乎不起作用


还有,你还有什么其他的改进建议吗?我是新手

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

$controller = new $controller_name($this);

//...

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

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

$controller = new $controller_name($this);

//...

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

将变量作为controller\u blog构造函数的参数从controller\u路由器传递到controller\u blog。

将变量作为controller\u blog构造函数的参数从controller\u路由器传递到controller\u blog。

在代码中有几种方法可以做到这一点,但首先需要记住这一点。这意味着-您需要了解,应用程序的结构是什么。每个实体有什么结构?每个实体是如何在类中实现的?实体是如何关联的,以及如何在代码中实现

例如,其中一个选项可以是从父类继承操作。但首先,您需要将您的controller\u blog作为controller\u路由器的子对象。这可能是有道理的——但它们是否以这种方式相互关联——由你自己决定。您可以通过以下方式执行此操作:

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;
    }
}

-由于尚未指定结构,您需要自己决定哪些更正确。

在代码中有几种方法可以做到这一点,但首先您需要记住这一点。这意味着-您需要了解,应用程序的结构是什么。每个实体有什么结构?每个实体是如何在类中实现的?实体是如何关联的,以及如何在代码中实现

例如,其中一个选项可以是从父类继承操作。但首先,您需要将您的controller\u blog作为controller\u路由器的子对象。这可能是有道理的——但它们是否以这种方式相互关联——由你自己决定。您可以通过以下方式执行此操作:

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;
    }
}

-由于您没有指定结构,您需要自己决定什么更正确。

当然没有,您没有将属性从控制器路由器传递到控制器。要澄清的是,这些类中的一个应该扩展另一个吗?或者两者都扩展一个基本控制器类?以上都没有?我只是在路由器控制器中声明blog\u控制器…所以不确定-我是新手:当然没有,你没有将属性从控制器路由器传递到控制器\u blog澄清一下,这些类中的一个应该扩展另一个吗?或者两者都扩展一个基本控制器类?以上都没有?我只是在路由器控制器中声明blog\u控制器…所以不确定-我是新手:嗯,这很有趣。所以我可以把所有变量作为一个对象传递,然后像这样?哇,好的,嗯,这很有趣。所以我可以把所有变量作为一个对象传递,然后像这样?哇,好吧。啊,问题是我不能使它成为路由器的固定扩展。在某些情况下,它可能是blog\u控制器,其他情况下,它可能是page\u控制器,等等……动态的东西,这就是重点。你需要决定什么是正确的并且适合你的结构。要做到这一点,你需要清楚地理解你的结构我想我会让一个对象在它之外创建一个新的对象,因为它需要根据url是动态的。我需要帮助!:啊,问题是我不能使它成为路由器的固定扩展。在某些情况下,它可能是blog\u控制器,其他情况下,它可能是page\u控制器,等等……动态的东西,这就是重点。你需要决定什么是正确的并且适合你的结构。要做到这一点,你需要清楚地理解你的结构我想我会让一个对象在它之外创建一个新的对象,因为它需要根据url是动态的。我需要帮助!: