12

如果您尝试在 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'))?

4

1 回答 1

24

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

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

这并不难,而且它使您所指的内容非常清楚。请记住,您应该追求可读性。命名空间导入在编写时很方便,但会使阅读变得混乱(因为在阅读代码时需要牢记当前的命名空间和任何导入)。

然而,在 5.5 中,有一个新的构造即将到来:

public function doesBooClassExist() {
    return class_exists(Boo::class);
}

伪魔术class常量可以放在任何标识符上,它将返回它将解析为的完全限定类名......

于 2013-04-05T17:31:00.657 回答