代码之家  ›  专栏  ›  技术社区  ›  Gufran Hasan

名称空间不适用于PHP中的自动加载魔力函数

  •  0
  • Gufran Hasan  · 技术社区  · 5 年前

    我创建了一个名为 class_one 具有命名空间 MyClassOne 如下所示。

    类对象

    namespace MyClassOne;
    
    class class_one
    {
        function __construct()
        {
            echo 'I am from Class One Constructor';
        }
    }
    

    我想把它用在 index.php 文件为:

    namespace MyClassOne;
    require_once('class_one.php');
    $one = new class_one();
    

    它工作得很好,但当我试图包括 __autoload 魔法功能为:

    namespace MyClassOne;
    function __autoload($className)
    {
        include_once("$className.php");
    }
    
    $one = new class_one();
    

    它给出一个错误:

    致命错误:未捕获错误:在 C:\xampp\htdocs\php\autoload\index.php:9堆栈跟踪:0 main抛出 在第9行的C:\xampp\htdocs\php\autoload\index.php中

    请帮助我在这个代码中哪里做错了?有更好的方法吗?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Alex Howansky    5 年前

    您将在程序代码中放置一个命名空间声明,它将 __autoload() 该命名空间内的函数,使其成为 \MyClassOne\__autoload() 而不是期望的 \__autoload() ,所以PHP在尝试加载类时不会激发它。

    通常,您只需要类定义文件中的名称空间声明:

    namespace MyClassOne;
    class class_one
    {
    }
    

    然后使用 use 在程序代码中:

    use MyClassOne\class_one;
    $one = new class_one();
    

    或者使用完整的类名:

    $one = new \MyClassOne\class_one();
    

    PSR-4 有关普遍接受的自动加载程序的详细信息。

        2
  •  1
  •   dılo sürücü    5 年前
    spl_autoload_register(function($class) {
        include 'classes/' . str_replace('\\', '/', $class) . '.class.php';
    });