Php:使用变量值检查类是否存在于:: class

时间:2017-04-30 11:03:14

标签: php

我有以下内容:

if (class_exists($name::class)) {
    return new $name();
}

类$ name将是另一个命名空间的一部分,这是一个工厂方法。

Php不喜欢这样并抛出错误:

Fatal error: Dynamic class names are not allowed in compile-time

我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

我记得前段时间(也许是一周)我在网上的某个地方,在关于MVC或设计模式(我认为)的演示文稿中听说过,这样的构造为“:: class”尚未在PHP中实现。但也许在PHP>我不确定。无论如何:你不需要使用“:: class”。 但是您需要将完全限定名称(FQN)传递给class_exists。所以它必须是一个FQN字符串。例如:

$classFQN = "\myNamespaceName\mySubNamespaceName1\mySubNamespaceName2\myClassName";
if (class_exists($classFQN)) {
return new $classFQN();
}

注意第一个“\”(反斜杠)。它将命名空间的类名称设置为FULLY限定名称。 请参阅http://www.php-fig.org/psr/psr-4/

上的“PSR-4:Autoloader”

答案 1 :(得分:-1)

function getClassInGlobal($name){
   if(isset($GLOBALS[$name])){
      if(is_object($GLOBALS[$name])){
         $obj = $GLOBALS[$name];
         return new $obj();
      }else{
         return false;
      };
   }else{
      return false;
   };
};

$Files = getClassInGlobal('myFilesClass');
if($Files){
   echo '<pre>';
   print_r(get_class_methods($Files));
   echo '</pre>';
};