【问题标题】:is there a way to solve this autoloader function problem in php?有没有办法在 php 中解决这个自动加载器功能问题?
【发布时间】:2020-05-11 21:19:13
【问题描述】:

我已将此代码上传到在线托管。我正面临这个自动加载器功能问题。 我已经在下面发布了我的所有代码和输出。请检查并帮助我。

这是我的数据库连接文件。 db.php

<?php
class Db {
    private $host = "localhost";
    private $user = "guru77";
    private $pwd  = "123456";
    private $dbName = "testingProjects";
protected function connect(){
    $dsn = 'mysql:host='.$this->host.';dbname='.$this->dbName;
    $pdo = new PDO($dsn,$this->user,$this->pwd);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
    return $pdo;
}

}

这是我的自动加载器文件

<?php


spl_autoload_register('myAutoLoader');
function myAutoLoader($className){
$extension = ".php";
$fullPath = $className . $extension;
include_once $fullPath;
}
 ?>

这是我的索引页 index.php

    <?php
require_once('autoloader.php');

  $obj = new Post_view();
  $rows = $obj->show();

?>

<html>
    <head>

    </head>
    <body>
        <?php foreach($rows as $row){

        echo $row['title'];

        }?>
    </body>
</html>

post_view.php

    <?php
require_once('post.php');
class Post_view extends Post{

    public function show(){
        $results = $this->showAll();
        return $results;
    }
}


?>

post.php

  <?php
include_once('db.php');
class Post extends Db{

    protected function  showAll(){
            $sql    = "SELECT * FROM posts";
            $stmt   = $this->connect()->query($sql);            
            $results = $stmt->fetchAll();
            return $results;
        }
}


?>

这是我的 error_log 文件。这是我得到的错误。我知道我的自动加载功能有问题,但我没有弄清楚。 错误日志

输出

【问题讨论】:

  • ????:“看起来您正在编写自己的 ORM。您是否考虑过使用已经编写、测试和广泛支持的 ORM,例如 RedBeanPHPDoctrine、@987654325 @ 或Eloquent?”
  • 这个错误到底有没有解决?
  • ????????请在此处以纯文本形式发布代码、错误、示例数据或文本输出,而不是难以阅读、无法复制粘贴以帮助测试代码或在答案中使用的图像,并且对依赖的人构成障碍在屏幕阅读器上。您可以编辑问题以在问题正文中添加代码。为了便于格式化,请使用{} 按钮标记代码块,或使用四个空格缩进以获得相同的效果。 屏幕截图的内容无法搜索、作为代码运行或复制和编辑以创建解决方案。一般 500 错误的屏幕截图只是占用空间。
  • 此错误是标准的“找不到文件”错误。检查那条路径。必要时更正。你确定你的自动加载器叫autoloader.php吗?你没有在你的问题中指定,但是当你require_once它时你会假设。
  • 我已经把上面所有的代码都贴出来了。我只是把图片放到输出和日志文件里

标签: php spl-autoload-register


【解决方案1】:

您的自动加载器正在尝试查找类名 Post_view(带有大写 P),因此它正在生成带有大写 P 的路径“Post_view.php”。但实际路径区分大小写,尽管其中有很多内容PHP 不是。

我建议更改您的文件名和类名以匹配,将其设为 Post_view.php(大写 P)或将类(以及所有引用,在这种情况下重要的是引用)更改为 post_view(小写 P)。那应该可以解决它。

您也可以更改自动加载器以强制所有内容为小写,但文件名和类以及所有引用的大小写都应与 IMO 匹配作为最佳实践(即使 PHP 类名不区分大小写)。

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2012-02-10
    • 2020-02-09
    • 1970-01-01
    • 2022-06-11
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多