如果尝试在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')
)?
答案 0 :(得分:23)
在5.5之前,最好的方法是始终使用完全限定的类名:
public function doesBooClassExist() {
return class_exists('Foo\Boo');
}
这并不难,而且它绝对清楚你所指的是什么。记住,你应该追求可读性。命名空间导入对于编写很方便,但会使读取混乱(因为在读取代码时需要记住当前命名空间和任何导入)。
然而,在5.5中,有一个新的构造出现:
public function doesBooClassExist() {
return class_exists(Boo::class);
}
class
伪魔术常量可以放在任何标识符上,它将返回它将解析为的完全限定类名.......