通过控制器跨类调用函数

时间:2013-11-30 22:31:23

标签: php oop controller

我有这个控制器类。

<?php

class controller{

function __construct(){
    $this->db       = new db;
    $this->output   = new output;
}

}

class db{
    function get(){
        return 'value from db';
    }

}

class output{
    function view(){
        print $controller->$db->get();
    }

}
$c  = new controller;
$c->output->view();
?>

当然这不起作用,但我认为它符合我想要做的事情。我该怎么做?

2 个答案:

答案 0 :(得分:1)

<?php

class controller{

function control($db, $output){
    $data = $db->get();
    $output->view($data);
}

}

class db{
    function get(){
        return 'value from db';
    }

}

class output{
    function view($data){
        print $data;
    }

}
$db = new db;
$output = new output;
$c = new controller;
$c->control($db, $output);
?>

答案 1 :(得分:0)

在这里你可以使用PHP5 Type Hinting。您可以阅读更多here

代码:

<?php

class controller
{
    function __construct()
    {
        $this->db         = new db;
        $this->output    = new output($this->db);
    }

}
class db
{
    function get()
    {
        return 'value from db';
    }
}

class output
{
    private $_db;

    public function __construct(db $get)
    {
        $this->_db = $get->get();
    }

    public function view() {
        return $this->_db;
    }
}

$c  = new controller();
echo $c->output->view();

在这个例子中:

我们正在键入提示db类将$this->db实例化对象传递给controller__construct魔术方法。

然后在output类上,我们使用实例化变量传递实际的类名db并获取方法get()并将值存储到私有$db_属性中返回view()方法。

希望它有所帮助!