是否有一个可以识别命名空间的替代php的class_exists()


Is there a namespace aware alternative to PHP's class_exists()?

如果您尝试在PHP中的类的方法中使用class_exists(),您必须指定类的全名——当前命名空间不受尊重。例如,如果我的类是:

 <?
    namespace Foo;
    class Bar{
       public function doesBooClassExist(){
            return class_exists('Boo');
       }
    }

Boo是一个类(可以自动加载),看起来像这样

   namespace Foo;
    class Boo{
       // stuff in here
    }

如果我尝试:

$bar = new Bar();
$success = $bar->doesBooClassExist();
var_dump($success);

你会得到一个假的…是否有另一种方法可以做到这一点,而不必显式指定完整的类名(即class_exits('Foo'Boo'))?

在5.5之前,最好的方法是始终使用完全限定的类名:

public function doesBooClassExist() {
    return class_exists('Foo'Boo');
}

这并不难,它使你绝对清楚你指的是什么。记住,你应该追求可读性。名称空间导入对于编写很方便,但是会使阅读变得混乱(因为在阅读代码时需要记住当前名称空间和任何导入)。

然而,在5.5中,有一个新的结构:
public function doesBooClassExist() {
    return class_exists(Boo::class);
}

class伪魔术常数可以放在任何标识符上,它将返回将解析为.......

的完全限定类名。