gpt4 book ai didi

PHP - spl_autoload_register 不适用于 `namespace` 和 `use`

转载 作者:可可西里 更新时间:2023-11-01 01:14:11 25 4
gpt4 key购买 nike

我正在学习并试图理解 namespaceuse 在 PHP 中的使用。我还使用 spl_autoload_register 作为 php.net documentation 中提到的.我仍然对使用它感到困惑并收到错误。

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

  1. php_oop.php
  2. tutor.php

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();

输出

Warning: The use statement with non-compound name 'php_oop' has no effect in C:\xampp\htdocs\tutorial\oop\tutor.php on line 9 string(7) "php_oop" Fatal error: Class 'php_oop' not found in C:\xampp\htdocs\tutorial\oop\tutor.php on line 11

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

最佳答案

use 不像 import。您必须使用 您正在使用的每个类而不是每个命名空间。对于您的示例,它将是:

use php_oop\php_oop;

这将从 php_oop 命名空间 导入 php_oop

参见 the documentation for importing namespaces获取更多信息和有用的提示。

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

关于PHP - spl_autoload_register 不适用于 `namespace` 和 `use`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44234273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com