gpt4 book ai didi

PHP 命名空间和 spl_autoload_register

转载 作者:可可西里 更新时间:2023-11-01 12:29:45 24 4
gpt4 key购买 nike

我让 spl_autoload_register 工作正常,但后来我决定添加一些命名空间以引入 PSR2 合规性,但似乎无法让它工作。

目录结构:

-index.php
-classes/
-Class1.class.php
-Class2.class.php
-Class3.class.php

每节课开始于:

namespace Foo;

Class ClassX {

索引.php:

<?php

spl_autoload_register(function($class) {
include 'classes/' . $class . '.class.php';
});

$myObj = new Class1();

echo $myObj->doSomething();

这会产生错误 Fatal error: Class 'Class1' not found in/var/www/myApp/index.php on line X

我的第一个想法是我需要在我的实例化中使用命名空间,所以我将 index.php 更改为:

$myObj = new Foo\Class1();

但是,然后我得到警告:include(classes/Foo\Class1.class.php):无法打开流:第 6 行的/var/www/myApp/index.php 中没有这样的文件或目录

如果我手动包含一切正常,include 'classes/Class1.class.php'; 等等。

最佳答案

所以问题是返回给 spl_autoload_register$class 是命名空间\类名, 反斜杠完好无损。所以当我实例化一个新对象时:

$myObj = new Foo\Class1();

包含路径变成了 /var/www/myApp/classes/Foo\Class1.php,反斜杠打破了路径。

我实现了这个来修复反斜杠,现在它可以工作了,虽然我不知道为什么这是必要的。

spl_autoload_register(function($class) {
include 'classes/' . str_replace('\\', '/', $class) . '.class.php';
});

关于PHP 命名空间和 spl_autoload_register,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494980/

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