PHP - spl_autoload_register不使用`namespace`和`use`

时间:2017-05-29 03:39:18

标签: php

我正在学习并尝试理解PHP中namespaceuse的使用。我还在php.net documentation上使用了spl_autoload_register。我仍然混淆使用它并收到错误。

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

  1. php_oop.php
  2. tutor.php
  3. php_oop.php

    <?php
    namespace php_oop;
    
    class php_oop 
    {
        public function __construct($name){
            $this->name = $name;
        }
    
        public function get(){
            return $this->name;
        }
    }
    

    tutor.php

    <?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语句带有非复合名称&#39; php_oop&#39;没有   第9行的C:\ xampp \ htdocs \ tutorial \ oop \ tutor.php中的效果       string(7)&#34; php_oop&#34;       致命错误:Class&#39; php_oop&#39;在第11行的C:\ xampp \ htdocs \ tutorial \ oop \ tutor.php中找不到

    我可以知道如何正确使用它吗?

1 个答案:

答案 0 :(得分:2)

useimport不同。您必须use 您正在使用的每个班级不是每个名称空间。对于您的示例,它将是:

use php_oop\php_oop;

会从php_oop 命名空间中导入php_oop

有关详细信息和有用提示,请参阅the documentation for importing namespaces

(副作用:传递给$class_name的回调的spl_autoload_register包含的全名,包括名称空间。为了让您的自动加载器正确加载您的类,将需要更改自动加载器代码或将php_oop.php文件移动到名为php_oop的文件夹以匹配它来自的命名空间。)

相关问题