问题:
我有一个index.php
文件,它具有几个作曲者依赖项。
在index.php
文件内部,我试图从外部类在另一个php(例如auth.php
)文件中调用静态方法,如下所示:
/*creating a class instance*/
$var = new AuthClass();
/*accessing an outside class method*/
$var = AuthClass::checkTime($tokenCode);
问题是,类中的checkTime
方法也需要composer依赖关系,尽管文件与index.php包含在同一文件夹中,并且包含index.php,但该继承者也不会继承。 / p>
PHP Fatal error: Uncaught Error: Class 'Token' not found
我已经尝试了所有方法-从添加require_once / include'index.php'到将Authos代码的自动加载复制到AuthClass代码内外的auth.php,但是没有任何效果,我仍然遇到相同的错误。
其他代码:
index.php
require __DIR__ . '/src/vendor/autoload.php';
$argument1 = $_GET['argument1'];
$tokenCode = $_GET['tokenCode'];
include 'config/database.php';
include 'objects/program1.php';
include 'auth.php';
use ReallySimpleJWT\Token;
use Carbon\Carbon;
$secret = "somesecret";
if (($_SERVER['REQUEST_METHOD']) == "GET") {
if ($_GET['url'] == "bankquery") {
if($tokenCode===NULL){
echo "no correct token provided";
print($results);
} else {
$results = Token::validate($tokenCode, $secret);
if ($results = 1){
$var = new AuthClass();
$var = AuthClass::checkTime($tokenCode);
} else {
echo "no correct token provided";
}
}
} else {
echo "some GET other query";
}
?>
auth.php
// loading composer
require __DIR__ . '/src/vendor/autoload.php';
//loading my index.php file
include 'index.php';
//using composer dependencies
use ReallySimpleJWT\Token;
use Carbon\Carbon;
class AuthClass{
public static function checkTime($tokenCode){
// getting payload from token code by accessing the composer dependency method in a class Token
$received = Token::getPayload($tokenCode);
return $received;
}
}
?>
需要帮助,伙计们。
答案 0 :(得分:1)
最简单的解决方案是在Composer自动加载中包含您自己的代码。 composer website告诉您如何做。
您不需要自己编写文件,也可以为您处理一切。
PSR-4告诉您如何命名代码以使用Namespacing。
答案 1 :(得分:1)
在定义之前,您正在使用AuthClass
-尝试在文件末尾移动include 'index.php';
行。
您还应该只包含vendor/autoload.php
一次-您无需在每个文件中都重复此操作,只需确保将其包含在处理请求的条目文件的顶部即可。
但这更像是设计问题的结果。您应该在单独的文件中定义AuthClass
,并避免在其中产生任何其他副作用-文件应仅定义类。这是PSR-1 rules的一部分:
文件应声明符号(类,函数,常量等) 或产生副作用(例如生成输出,更改.ini设置等) 但不应两者都做。
由于您已经在使用Composer的自动加载器,因此注册自己的自动加载规则应该相对容易,因此Composer的自动加载器将负责类的自动加载。
如果此时您仍然获得Class 'X' not found
,则可能未安装某些依赖项,或者自动加载规则不正确。