【发布时间】:2013-03-28 04:26:37
【问题描述】:
如果你尝试在 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'))?
【问题讨论】:
-
您是否尝试过在您的
doesBooClassExist()方法中使用__NAMESPACE__前缀类名?还是我误解了您要做什么? (见php.net/manual/en/language.namespaces.nsconstants.php) -
@Crontab 这可以按照您的指示完成,如果没有其他方式已经知道命名空间 - 只是个人喜好。您应该将此作为答案。
-
我不确定,但我认为 class_exists 不在命名空间中搜索是正确的。如果它直接在命名空间中检查,您将如何检查任何命名空间之外的类里面?
-
@Ray 看起来其他几个人在午餐时击败了我。 =)
标签: php namespaces