【问题标题】:My __autoload function doesn't work after installing JSON web token and composer安装 JSON Web 令牌和作曲家后,我的 __autoload 功能不起作用
【发布时间】:2020-09-12 05:43:08
【问题描述】:

所以我有一个 mvc php 项目,我有一个 core.php,它有一个 __autoload 函数,可以像这样加载我的控制器和模型类:

 <?php
 function __autoload($classname) {
  if (strhas($classname, "Model")) {
    $filename = str_replace("Model", "", $classname);
    $filename = strtolower($filename);
    require_once("mvc/model/$filename.php");
    return;
  }

  if (strhas($classname, "Controller")) {
    $filename = str_replace("Controller", "", $classname);
    $filename = strtolower($filename);
    require_once("mvc/controller/$filename.php");
    return;
  }
}

但在安装 JSON Web 令牌 (JWT) 和作曲家后,我的 __autoload 函数不再起作用,并且我的控制器也不再被发现。

这是我的项目结构:

index.php
system/
 -core.php
 -loader.php
 -...
mvc/
 -controller/
  --...
 -model/
  --...
...

【问题讨论】:

标签: php jwt


【解决方案1】:

这正是__autoload()的缺点,也是in the manual这句话的原因:

spl_autoload_register() 函数注册任意数量的自动加载器,如果当前未定义类和接口,则可以自动加载它们。通过注册自动加载器,PHP 获得了最后一次加载类或接口的机会,以防止它因错误而失败。

提示 虽然__autoload() 函数也可以用于自动加载类和接口,但最好使用spl_autoload_register() 函数。这是因为它是一种更灵活的替代方案(允许在应用程序中指定任意数量的自动加载器,例如在第三方库中)。因此,自 PHP 7.2.0 起,不鼓励使用 __autoload() 并弃用。

您可以使用推荐的替换或configure Compose to load your own custom classes(您的架构看起来类似于 PSR-4,因此只需稍作更改即可使用)。

【讨论】:

    猜你喜欢
    • 2017-03-13
    • 2014-01-30
    • 2019-05-02
    • 2021-10-05
    • 1970-01-01
    • 2016-07-05
    • 2021-08-07
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多