gpt4 book ai didi

PHP - 命名空间和自动加载问题

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

我已经设置了一个简单的自动加载来理解与命名空间一起工作时的原则。

test.php:

namespace House;

function __autoload($classname)
{
$parts = explode('\\', $classname);

$class = 'Room/'.end($parts).'.php';

require_once($class);
}


$Toy = new Toy();
echo $Toy->hello();

房间/玩具.php:
namespace House;

class Toy
{
public function hello() { return "HELLO"; }
}

声明 $Toy 时出现 fatal error :第 18 行的 test.php 中未找到 Class 'House\Toy'

我在这里没有做错什么?

当删除 __autoload 函数而只是放入
require_once('Room/Toy.php');

有用!

最佳答案

您的 test.php应该是这样的:

use House\Toy as Toy;

function __autoload($classname)
{
$parts = explode('\\', $classname);
$class = 'Room/'.end($parts).'.php';
require_once($class);
}

$Toy = new Toy();
echo $Toy->hello();

如果您正在放置 namespace House在文件的顶部,该文件中声明的所有函数都将属于命名空间 House .意义 __autoload()获取 House\__autoload()并且会失去它的神奇意义。

还有一点,把namespace House的文件存放起来不是更好吗?在名为 House 的文件夹中? (您目前正在使用 Room )。如果您这样做, __autoload()函数可以更一般地编写:
function __autoload($classname)
{
$parts = explode('\\', $classname);
$path = implode('/', $parts) . '.php';
require_once($path);
}

关于PHP - 命名空间和自动加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29487199/

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