2017-10-11 36 views
-1

我想用一个简单的例子,我写测试,但浏览器总是说:PHP指数模型类

Fatal error: Uncaught Error: Class 'Model' not found in C:\xampp\htdocs\mvcFirst\index.php:9 Stack trace: #0 {main} thrown in C:\xampp\htdocs\mvcFirst\index.php on line 9

我搜索在互联网,但没有发现的原因那。 这里是我的代码:

  1. 模型类:

    <?php 
    
    class Model 
    { 
        public $string; 
        public function __construct() 
        { 
         $this->string="MVC and PHP are awesome!"; 
        } 
    } 
    
  2. 控制器类:

    <?php 
    class Controller 
    { 
        private $model; 
        public function __construct($model) 
        { 
         $this->model=$model; 
        } 
    } 
    
  3. 视图类:

    <?php 
    class View 
    { 
        private $controller; 
        private $model; 
        public function __construct($controller,$model) 
        { 
         $this->controller=$controller; 
         $this->model=$model; 
        } 
        public function output(){ 
         return "<p>".$this->model->string."</p>"; 
        } 
    } 
    
  4. 的index.php:

    <?php 
    
    try { 
        $model = new Model(); 
        $controller = new Controller($model); 
        $view = new View($controller, $model); 
        echo $view->output(); 
    }catch (Exception $e){ 
        echo $e->getMessage(); 
    
    } 
    ?> 
    

    有任何建议,我应该心存感激。

+0

了解自动加载机 –

+0

这是由MVC结构的习惯吗? –

+0

在PHP中,你需要包含你需要的文件。你似乎没有这样做。常见的(现代)模式是使用自动加载。这是PHP遇到无法找到的类时运行的函数。它将尝试使用名称空间和类名称加载类。这包括“魔术”并自动为您提供。 – OptimusCrime

回答

1

在PHP中,您需要包含您希望使用的外部文件。一种方法是使用函数include_once并指定要包含在代码中的每个文件。

假设你的文件被命名为model.phpcontroller.phpview.php,你需要把这个权利开幕PHP标签后,您index.php文件:

include_once './model.php'; 
include_once './controller.php'; 
include_once './view.php'; 

另一种方式是自动加载应用。自动加载是在PHP遇到一个尚未见过的类和尚未加载的类时完成的。自动加载使用功能spl_autoload_register完成。官方的文档包含了它的工作原理非常简单说明代码:

<?php 
spl_autoload_register(function ($class_name) { 
    include $class_name . '.php'; 
}); 
+0

它的工作原理!就像魔术师真的很帅。 我不知道我必须包括他们之前,我以为我没有需要它cuz那里有类不是一个PHP文件。 –

+0

@SamBoHamdan您应该仔细阅读自动加载,因为它使整个过程更容易处理。否则,你会花费你的日子结束,包括文件。只要您移动文件等,这也会中断。自动加载更容易管理。 – OptimusCrime

+0

是的,我会与你的建议,有一个愉快的一天男人:) –