我正在学习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()打印功能消息?
答案 0 :(得分:0)
您的代码中的问题实际上非常简单-您将字符串传递给:
protected function get_model($model) {
所以这行:
if (is_object($model)) {
无效。
在您的代码中,它实际上应该是:
if (isset($this->model[$model]) && is_object($this->model[$model])) {
,当您检查由名称提供的模型的实例是否已经在控制器内部的数组中。还请务必注意,在您的代码体系结构中,控制器中的类的每个模型只能有一个实例:不确定那是否是您想要的。
我了解您正在这里学习有关继承和模式的信息,但是我强烈建议您转到具有良好文档的实际示例-例如,检查Symfony框架的文档并开始在其中构建一些内容。