常量:: class 可以用于变量吗?
例如$var::class
,其中$var
具有命名空间。
我尝试过:
$var::class
-错误
${'$var::class'}
-未定义变量:$ var :: class in
eval('$var::class')
-解析错误:语法错误,意外结束 文件放在:eval()的代码上
我的php代码:-
<?php
namespace Engine\DataBase;
use Logs\Logger;
use Exception;
class DataBaseManager extends DataBaseRequester
{
const CONTROLLERS = [
"DataBaseUsersController"
];
public function __construct()
{
parent::__construct();
}
public function complete(string $method, array $params)
{
foreach (self::CONTROLLERS as $CONTROLLER) {
try {
$class_name = 'Engine\DataBase\\' . $CONTROLLER;
$method_availability = method_exists(eval('$class_name::class'), $method);
if ($method_availability) {
if (!isset(${$CONTROLLER})) {
${$CONTROLLER} = new $class_name($this);
}
return ${$CONTROLLER}->$method($params);
} else throw new Exception("No class with " . $method . " method was found");
} catch(Exception $e){
Logger::Log($e->getMessage(), LOGGER::ERROR, "DataBaseManager");
return false;
}
}
}
}
我需要检查在没有初始化的情况下需要哪种动态(将来)类名称数组。 如果喜欢硬编码类,则当前代码有效
method_exists(DataBaseUsersController::class, $method);
答案 0 :(得分:1)
所有::class
所做的工作都是返回一个正确构造的,具有完全限定类名称的字符串,例如
namespace SomeNamespace {
class SomeClass { }
}
namespace {
$var = SomeNamespace\SomeClass::class;
echo $var; // SomeNamespace\SomeClass
}
因此,您可以使用包含完全限定的类名的字符串,就像使用::class
一样,因为结果相同。
使用::class
的好处是它尊重您的use
语句并根据它们解析完全限定的类名。