PHP-spl_autoload_寄存器不能与'namespace'和'use'一起使用`

PHP-spl_autoload_寄存器不能与'namespace'和'use'一起使用`,php,Php,我正在学习并试图理解PHP中名称空间和使用的用法。我还使用了上提到的spl\u autoload\u寄存器。我在使用它时仍然感到困惑,并且出现了一个错误 我的教程文件夹中有2个文件: php_oop.php tutor.php php\u oop.php <?php namespace php_oop; class php_oop { public function __construct($name){ $this->name = $name;

我正在学习并试图理解PHP中
名称空间
使用
的用法。我还使用了上提到的
spl\u autoload\u寄存器。我在使用它时仍然感到困惑,并且出现了一个错误

我的教程文件夹中有2个文件:

  • php_oop.php
  • tutor.php
  • php\u oop.php

    <?php
    namespace php_oop;
    
    class php_oop 
    {
        public function __construct($name){
            $this->name = $name;
        }
    
        public function get(){
            return $this->name;
        }
    }
    
    <?php
    
    spl_autoload_register(function ($class_name) {
        var_dump($class_name);
        include $class_name . '.php';
        // include 'php_oop.php';
    });
    
    use php_oop;
    
    $tutor = new php_oop('My Name');
    echo $tutor->get();
    

    使用
    与导入
    不同。您必须
    使用您正在使用的每个类,而不是每个命名空间。举个例子,它是:

    use php_oop\php_oop;
    
    它将从
    php\u oop
    命名空间导入
    php\u oop

    有关更多信息和有用提示,请参阅


    (副作用:传递给
    spl\u autoload\u register
    $class\u name
    回调包含类的全名,包括名称空间。要使自动加载程序正确加载类,您需要更改自动加载程序代码或将
    php\u oop.php
    文件移动到名为
    php\u oop
    的文件夹中,以匹配t。)他说它来自哪里。)

    类名的第一个字母必须是大写。这只是一种风格,@Nidhi。感谢您提供的详细信息。我按照您的建议创建了一个文件夹。如果我想更改自动加载器代码,是否需要手动分配文件名,如
    include'php_oop.php';
    否,因为这不是一个自动加载器 ;). 如果您真的想这样做的话,您可能需要将
    分解为``或其他形式,并获取结果数组中的最后一个字符串。但是为了避免冲突,按名称空间保持有组织的文件夹结构更好,更符合标准。我想再次确认关于名称空间,它必须与我们的文件名相同吗?文件名应该是类的名称。指向文件名的文件夹应与命名空间匹配。例如,如果您的类名是
    App\Models\User
    ,您将在
    App
    中创建一个
    App
    目录,在
    App
    中创建一个
    Models
    目录,在
    App/Models
    中创建一个
    User.php
    。感谢您的解释。:)