为了检查类,您必须使用名称空间(完整路径)指定它:
namespace Foo;
class Bar
{
}
和
var_dump(class_exists('Bar'), class_exists('\Foo\Bar'));
-ie,您必须指定类的完整路径。您在名称空间而不是全局上下文中定义它。
但是,如果确实像在示例中一样在名称空间中导入类,则可以通过导入的名称而不是名称空间来引用该类,但这不允许您在动态构造中尤其是在那些表单类名称。例如,以下所有都会失败:
namespace Foo;
class Bar {
public static function baz() {}
}
use Foo\Bar;
var_dump(class_exists('Bar'));
var_dump(method_exists('Bar', 'baz'));
$ref = "Bar";
$obj = new $ref();
等等。问题在于处理导入的别名的机制。因此,在使用此类构造时,您必须指定完整路径:
var_dump(class_exists('\Foo\Bar'));
var_dump(method_exists('\Foo\Bar', 'baz'));
$ref = 'Foo\Bar';
$obj = new $ref();