【问题标题】:Can special constant ::class uses with variables?特殊常量 ::class 可以与变量一起使用吗?
【发布时间】: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 是的,真的...很容易))非常感谢)

标签: php class


【解决方案1】:

::class 所做的只是返回一个正确构造的完全限定类名的字符串,例如

namespace SomeNamespace {
    class SomeClass { }
}
namespace {
    $var = SomeNamespace\SomeClass::class;
    echo $var; // SomeNamespace\SomeClass
}

因此,您可以像使用 ::class 一样使用包含完全限定类名的字符串,因为结果是相同的。

使用::class 的优点是它尊重您的use 语句并根据它们解析完全限定的类名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多