从具有依赖项PHP的外部类中调用方法

时间:2018-08-24 12:32:49

标签: php class dependencies composer-php

问题: 我有一个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;
}
}

?>

需要帮助,伙计们。

2 个答案:

答案 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,则可能未安装某些依赖项,或者自动加载规则不正确。