【问题标题】:Fatal error: Uncaught Error: Class 'todo\views\DataBase' not found致命错误:未捕获的错误:找不到类“todo\views\DataBase”
【发布时间】:2020-04-26 18:27:02
【问题描述】:

我正在使用composerautoload 我的课程。

我的文件夹结构:

mytodo
     - src
        -app
            IDb.php
        -views
            db.php
            todos.php
     - web
         index.php
     -composer.json

试图从todos.php__constructor()继承Database类。但是给出这个错误!!!

tod​​os.php

<?php
namespace todo\views;
use todo\app\IDb;

class Todo extends DataBase implements IDb{

    public function __construct() 
    {
         $newdb = new DataBase();
         $connection = $newdb->connect();
    }
}

composer.json

{
    "name": "todo/website",
    "description": "This is a TODO App",
    "minimum-stability": "stable",
    "autoload": {
        "psr-4": {
            "todo\\": "src/"
        }
    },
    "require": {
        "php": ">=7.2.0"
    }
}

db.php

<?php
namespace todo\views;
use todo\app\IDb;

abstract class DataBase implements IDb{

    private $user;
    private $host;
    private $pass;
    private $db;
    protected $connection;

    public function __construct()
    {
        $this->user = "root";
        $this->host = "localhost";
        $this->pass = "";
        $this->db = "db_todos";
    }

    public function connect()
    {
        $connection = mysqli_connect($this->host, $this->user, $this->pass, $this->db);
        return $connection;
    }
}
?>

数据库接口:

<?php
namespace todo\app;

interface IDb {
    public function connect() : string;
}

无法找出问题所在。请提前帮助我。

【问题讨论】:

  • 您尝试过什么调试问题?我在您的代码中发现了多个问题:如果您没有要实例化名为 DataBase 的任何非抽象类,new DataBase 将引发错误

标签: php oop composer-php autoload


【解决方案1】:

这是因为命名错误。 PSR-4 自动加载意味着文件名与类名匹配。

解决方法:根据类名重命名文件:todos.php变成ToDo.phpdb.php变成DataBase.php

【讨论】:

  • 你可以反过来重命名类,但不推荐这样做,因为按照惯例,类名通常以大写字母开头。
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 2018-09-06
  • 2018-05-11
  • 2020-11-09
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多