模型实例不返回方法

时间:2020-01-11 00:25:08

标签: php

我正在学习PHP MVC逻辑,并了解它们如何工作,我正在编写一个基本框架。我写了一个控制器和一个模型类,但是当我将模型类加载到控制器中时,我无法运行模型方法。

下面是示例代码:


<?php

class Controller {
    protected $model;

    protected function load_model($model) {
        if (class_exists($model)){
            return $this->model[$model] = new $model();
        }
        else {
            return false;
        }
    }

    protected function get_model($model) {
        if (is_object($model)) {
            return $this->model[$model];
        }
        else {
            return false;
        }
    }
}

class FooModel {
    public function __construct() {
        echo "Class loaded";
    }
    public function echo_mess(){
        echo "Function run";
    }
}


class BarController extends Controller {
    public function __construct() {
        $this->load_model("FooModel");      
    }

    public function result() {
        $this->get_model("FooModel")->echo_mess();
    }
}

$obj = new BarController();
echo "<br />";
$obj->result();

当类被调用并希望实例化时,我可以测试并获得“类已加载”消息。

您能指出以上缺陷吗?并获得result()打印功能消息?

1 个答案:

答案 0 :(得分:0)

您的代码中的问题实际上非常简单-您将字符串传递给:

protected function get_model($model) {

所以这行:

if (is_object($model)) {

无效。

在您的代码中,它实际上应该是:

if (isset($this->model[$model]) && is_object($this->model[$model])) {

,当您检查由名称提供的模型的实例是否已经在控制器内部的数组中。还请务必注意,在您的代码体系结构中,控制器中的类的每个模型只能有一个实例:不确定那是否是您想要的。

我了解您正在这里学习有关继承和模式的信息,但是我强烈建议您转到具有良好文档的实际示例-例如,检查Symfony框架的文档并开始在其中构建一些内容。

相关问题