如何在子类PHP中使用父类中创建的对象

时间:2013-12-03 03:54:17

标签: php

我有这个代码,我正在尝试使用对象

<?php

class Controller {

    public $_view;

    public function __construct() {
        $this->_view = new View();
        return $this->_view;

    }

}




class View {


    public $_params = array ();


    public function set_params($index_name,$valores) {
        $this->_params[$index_name] = $valores;
    }

    public function get_param($index_name){
        return $this->_params[$index_name];
    }
}

?>

我想这样做:

class Index extends Controller {

    public function index() {
        $model = Model::get_estancia();
        $usuarios = $model->query("SELECT * FROM usuarios");
        $this->_view->set_params();   // cant be used.
        $this->load_view("index/index");

    }
}

我想使用set_parms函数。 但我看不到视图功能,然后我无法使用。 有人可以解释并告诉我一个安全的好方法吗?

1 个答案:

答案 0 :(得分:2)

Phil的更正:如果找不到__construct()方法,PHP将恢复为旧的构造函数语法,并检查与对象同名的方法。在您的情况下,方法index()被视为构造函数,并阻止父的构造函数将视图对象加载到$ _view属性中。

您可以通过在子节点中定义__construct()并调用父节点的构造函数来强制类继承父节点的构造函数:

public function __construct() {
    parent::_construct();
}

这是固定代码:

<?php

class Controller {

    public $_view;

    public function __construct() {
        $this->_view = new View();
        return $this->_view;

    }

}

class View {


    public $_params = array ();


    public function set_params($index_name,$valores) {
        $this->_params[$index_name] = $valores;
    }

    public function get_param($index_name){
        return $this->_params[$index_name];
    }
}

class Index extends Controller {
    public function __construct() {
        parent::__construct();
    }
    public function index() {
        $model = Model::get_estancia();
        $usuarios = $model->query("SELECT * FROM usuarios");
        $this->_view->set_params();   // cant be used.
        $this->load_view("index/index");

    }
}