gpt4 book ai didi

php - 命名空间不适用于 php 中的 __autoload 魔法函数

转载 作者:行者123 更新时间:2023-12-04 16:59:06 25 4
gpt4 key购买 nike

我创建了一个名为 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/

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