如何检查php中是否存在命名空间

时间:2013-08-20 14:28:54

标签: php class namespaces exists

我有一个 php库 https://github.com/tedivm/Fetch,它使用Fetch命名空间,我想在我的脚本中检查它是否存在。

我的脚本代码:

// Load Fetch
spl_autoload_register(function ($class) {
    $file = __DIR__ . '/vendor/' . strtr($class, '\\', '/') . '.php';
    if (file_exists($file)) {
        require $file;

        return true;
    }
});

if (!class_exists('\\Fetch')) {
  exit('Failed to load the library: Fetch');
}
$mail = new \Fetch\Server($server, $port);

但始终显示此消息。但图书馆完全正常运作。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:25)

我相信你需要使用class_exists中的整个命名空间。如下所示:

class_exists('Fetch\\Server')

答案 1 :(得分:4)

您无法直接检查是否存在特定命名空间,即您必须class_exists('Fetch\\SomeClass')。也请看这个问题:is it possible to get list of defined namespaces

答案 2 :(得分:4)

正如 George Steel 所写,无法检查命名空间。这是因为名称空间不存在;只有结构存在于名称空间内。见下面的例子:

namespace Foo;

class Bar {
}

var_dump(class_exists('Foo')); // bool(false)
var_dump(class_exists('Foo\Bar')); // bool(true)