我创建了一个名为 class_one
的类带命名空间 MyClassOne
如下。
class_one.php
namespace MyClassOne;
class class_one
{
function __construct()
{
echo 'I am from Class One Constructor';
}
}
我正在尝试在
index.php
中使用它文件为:namespace MyClassOne;
require_once('class_one.php');
$one = new class_one();
它工作正常,但是当我尝试包含
__autoload
时魔术功能为:namespace MyClassOne;
function __autoload($className)
{
include_once("$className.php");
}
$one = new class_one();
它给出了一个错误:
Fatal error: Uncaught Error: Class 'MyClassOne\class_one' not found in C:\xampp\htdocs\PHP\autoload\index.php:9 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PHP\autoload\index.php on line 9
请帮助我在这段代码中我做错了什么?有一个更好的方法吗?
最佳答案
您在程序代码中放置了一个命名空间声明,其中放置了 __autoload()
该命名空间内的函数,使其成为 \MyClassOne\__autoload()
而不是所需的 \__autoload()
,因此 PHP 在尝试加载类时不会触发它。
通常,您只需要类定义文件中的命名空间声明:
namespace MyClassOne;
class class_one
{
}
然后使用
use
在您的程序代码中:use MyClassOne\class_one;
$one = new class_one();
或者使用完整的类名:
$one = new \MyClassOne\class_one();
见 PSR-4有关普遍接受的自动加载程序的详细信息。
关于php - 命名空间不适用于 php 中的 __autoload 魔法函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654769/