【问题标题】:Class not found error using namespaces and "use"使用命名空间和“使用”找不到类错误
【发布时间】:2020-01-28 22:04:28
【问题描述】:

我是 PHP 新手,我正在学习在线课程(因此我没有使用自动加载或任何其他方式来加载类)。

我的问题是我的控制器类(我在其中使用“use”)看不到我的模型类(我在其中声明了命名空间)。

错误是:

致命错误:未捕获的错误:在第 20 行的 C:\xampp_php729\htdocs\Freeblog\App\Controllers\postController.php 中找不到类 'App\Models\Post'

这是我的代码:

PostController.php


namespace App\Controllers;

use App\Models\Post;

class PostController {

    protected $layout = __DIR__ . '/../../Layout/index.template.php';
    protected $conn;
    public $content;
    public $posts;
    protected $myPost;

    public function __construct(\PDO $conn) {
        $this->conn = $conn;

        try {

            $this->myPost = new Post($conn);
        } catch (Exception $e) {
            die($e->getMessage());
        }
        $this->content = $this->process();
    }
....
} 

Post.php:

namespace App\Models;
use \PDO;


class Post {

    protected $conn;

    public function __construct(PDO $conn){
        $this->conn = $conn;

    } 
...
}

这是项目结构:

【问题讨论】:

  • 那么,如果您不使用任何自动加载,您希望如何将文件包含(加载)?
  • 我不知道我正在参加一个课程来学习它:)
  • 在其他两个 php 文件中,我做了同样的事情并且它起作用了.. 唯一的区别是它们在同一个包中(但我试图将 Post 和 PostController 移动到同一个包中)包,它不起作用)

标签: php class import namespaces


【解决方案1】:

由于您没有使用自动加载,因此控制器以外的目录中的文件将不会加载。

所以如果你不想使用自动加载,你应该使用 include 语句或 require 语句手动包含文件(在其他目录中的文件)。(在 PostController.php 文件中包含文件 Post.php)

正如您的 cmets 中所述,必须加载其他正在工作的文件,因为它们存在于同一目录中(相同的包在这里无关紧要,但相同的目录对于加载其他文件很重要)。

【讨论】:

  • 非常感谢!我的 index.php 中缺少“require”部分。不幸的是,我专注于这两个文件,而不是查看其他文件:(
猜你喜欢
  • 1970-01-01
  • 2014-10-19
  • 2012-10-23
  • 2020-02-10
  • 2017-05-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多