PHP-spl_autoload_寄存器不能与'namespace'和'use'一起使用`
我正在学习并试图理解PHP中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;
名称空间
和使用
的用法。我还使用了上提到的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
。感谢您的解释。:)