我正在学习并尝试理解PHP中namespace
和use
的使用。我还在php.net documentation上使用了spl_autoload_register
。我仍然混淆使用它并收到错误。
我的教程文件夹中有2个文件:
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中找不到
我可以知道如何正确使用它吗?
答案 0 :(得分:2)
use
与import
不同。您必须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
的文件夹以匹配它来自的命名空间。)