gpt4 book ai didi

PHP 命名空间自动加载

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

我有以下目录结构:/var/www/Project1/Project1.php/var/www/Project1/User/UserProfile.php在 Project1.php 中:

<?php
namespace Project1;
set_include_path( __DIR__ );
spl_autoload_extensions('.php');
spl_autoload_register();

use User\UserProfile;

$u = new Avatar();
...

?>

在 UserProfile.php 中:
<?php    
namespace Project1\User;
class Avatar{
}
...
?>

当我执行 php Project1.php我得到:

PHP Fatal error: spl_autoload9(): Class User\UserProfile could not be loaded



我看不出问题。

最佳答案

spl_autoload_register();在没有参数的情况下调用时,只会注册默认的自动加载器,该自动加载器无法使用您的项目布局处理命名空间。您必须注册自己的方法才能使其工作。像这样:

spl_autoload_register('my_autoload');

自动加载功能来了。此函数期望类以如下方式存储:
/path/to/project/Namespace/Classname.php
/path/to/project/Namespace/Subnamespace/Classname.php

您可以将类命名为 \Namespaces\Classname还是老式的方式 Namespace_Classname :
function my_autoload ($classname) {
// if the class where already loaded. should not happen
if (class_exists($classname)) {
return true;
}

// Works for PEAR style class names and namespaced class names
$path = str_replace(
array('_', '\\'),
'/',
$classname
) . '.php';

if (file_exists('/path/to/project/' . $tail)) {
include_once 'path/to/project/' . $tail;
return true;
}

return false;
}

请注意,该函数取自我的 github 包 Jm_Autoloader .该包提供了更多功能,如多个包含路径、路径前缀和静态自动加载(具有预定义的关联数组类名 => 文件名)。如果你愿意,你可以使用它;)

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

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