PHP通过对其进行动态处理来动态获取类的命名空间

时间:2017-11-06 04:54:53

标签: php

我有一个字符串,路由,然后我将它爆炸,然后我有一个类名。 $callback = explode('@', $callback); $callback[0]是类名。我正在制作一个路由器,并根据课程和方法我返回。

我想获得完整的命名空间,当我使用它时,它可以工作,但现在我想动态地制作它。

如何将BaseController连接到:: class?

BasController::class

$fullclass = HERE I NEED THE FULL NAMESPACE$callback[0];
$class = new $fullclass;
$method = $callback[1];
$class->$method();

Exaple index.php

Router::route('/user/{id}/' , 'BaseController@show');
Router::execute($_SERVER['REQUEST_URI']);

路由器:

namespace App;


class Router
{

private static $routes = array();

private function __construct()
{

}

private function __clone()
{
}

public static function route($pattern, $callback)
{
    $pattern = $pattern;
    self::$routes[$pattern] = $callback;
}

public static function execute($url)
{
    foreach (self::$routes as $pattern => $callback) {
        if ($pattern == $url) {
            $callback = explode('@', $callback);



            $fullclass = __NAMESPACE__ . '\\Controllers\\' . $callback[0];
            $class = new $fullclass;
            $method = $callback[1];
            $class->$method();
        }else{
            echo 404;
        }


    }
}

}

3 个答案:

答案 0 :(得分:0)

我希望您尝试检索命名空间

echo (new \ReflectionClass($object))->getNamespaceName() ;

如果您在该范围内尝试

__NAMESAPCE__

如果您正在寻找autoload

,请参阅此文档

答案 1 :(得分:0)

BasController :: class在字符串中返回一个完整的类名,在这种情况下,您可以简单地在其上连接任何字符串。如果$ callback [0]是一个字符串,你可以在代码下面做。

$fullclass = BasController::class . $callback[0];
$class = new $fullclass;
$method = $callback[1];
$class->$method();

答案 2 :(得分:0)

我正在寻找的是将班级作为路线的参数

Router::route('/user/{id}/' , App\Controllers\BaseController::class , 'show');