我有一个文件夹结构如下的php应用程序
-/app
-/vendor
-index.php
我的"供应商/自动加载.php"文件包含在"索引.php"文件中。当我从供应商调用一个类时,例如"index.php"文件中的 upload(),它会毫无问题地加载。但是,如果我从"app"文件夹中的类在方法中调用相同的类,则会显示找不到类错误。
"app"文件夹中的类是像这样自动加载的
"autoload": {
"psr-4":{
"App\": "app/"
}
},
"require": {
"verot/class.upload.php": "dev-master"
}
如何从应用程序文件夹中自动加载的类内的供应商文件夹调用类?
编辑:
应用程序文件夹中的类在"index.php"中调用,如下所示
include("vendor/autoload.php");
$get_class = 'User';
require_once('app/'.$get_class.'.php');
$get_class = 'App\'.str_replace('/', '\', $class_name);
if(method_exists($get_class , 'uploadImage')) {
$class = new $get_class();
$class->{ 'uploadImage' }();
}
这是在用户类中调用的 upload() 类
namespace AppUser;
class User{
public function uploadImage()
{
$file = 'user.jpg';
$handle = new upload($file);
}
}
这是错误消息
Class 'Appupload' not found in app/User.php:20
这是一个命名空间问题。您需要添加:
use upload;
在 AppUser
-file 中的命名空间声明下导入上传类,或者在使用它时需要将完整的命名空间用于 upload
类:
$handle = new upload($file);
您可以在手册中阅读更多相关信息
注意:在发布的代码中,当您尝试在 uploadImage()
函数中使用它时,$file
是未定义的。
注意 2:如果您已经在index.php
的顶部包含vendor/autoload.php
(您应该这样做),则无需在 PHP 中手动包含类。作曲家自动加载器将自动处理。只是为了:$user = new AppUser
.