【发布时间】:2019-06-28 07:33:28
【问题描述】:
constant ::class 可以用于变量吗?
例如$var::class,其中$var 具有命名空间的类。
我试过了:
$var::class- 错误
${'$var::class'}- 未定义变量:$var::class in
eval('$var::class')- 解析错误:语法错误,意外结束 file in : eval()'d code on
我的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);
【问题讨论】:
-
$class_name已经存储了类名,不需要使用::class。 -
@u_mulder 是的,真的...很容易))非常感谢)