gpt4 book ai didi

namespaces - 将命名空间与 spl_autoload_register 一起使用

转载 作者:行者123 更新时间:2023-12-04 17:05:23 27 4
gpt4 key购买 nike

use PHPMailer\PHPMailer\PHPMailer;  

require_once "PHPMailer/PHPMailer.php";

$mail = new PHPMailer(true);
这很好用。
但是当我尝试使用 spl_autoload_register 自动加载类时,我得到一个
警告:require_once(PHPMailer/PHPMailer\PHPMailer\PHPMailer.php):无法打开流:没有这样的文件或目录
use PHPMailer\PHPMailer\PHPMailer;

spl_autoload_register(function($class){
require_once 'PHPMailer/' . $class . '.php';
});

$mail = new PHPMailer(true);`
我有点困惑,因为自动加载器现在需要 PHPMailer/PHPMailer 命名空间中 PHPMailer 类的完整路径。

最佳答案

在做了一些扩展研究之后,似乎有两种方法可以使这项工作。

  • 当我们使用“use”语句时,我们告诉 spl_autoload_register() PHPMailer() 类所在的位置。在本例中,它位于 PHPMailer/PHPMailer 命名空间中。
    为了使其正常工作,我们需要将命名空间与文件夹结构相匹配。这意味着 PHPMailer.php 文件必须位于 PHPMailer/PHPMailer 文件夹中。
    我们像这样实例化:$mail = new PHPMailer();
  • 如果我们不使用“use”语句,我们可以在实例化类时告诉 spl_autoload_register() 类在哪里。$mail = new PHPMailer/PHPMailer/PHPMailer();
  • 关于namespaces - 将命名空间与 spl_autoload_register 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67901706/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com