Как проверить наличие пространства имен в PHP

У меня есть библиотека 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 FetchServer($server, $port);

но это сообщение всегда отображается. Но библиотека полностью работает.

заранее спасибо за любую помощь!

3 ответов


вам нужно использовать все пространство имен в class_exists Я верю. Что-то вроде:

class_exists('Fetch\Server')

вы не можете напрямую проверить наличие определенного пространства имен, т. е. вам придется class_exists('Fetch\SomeClass'). См. Также этот вопрос:можно ли получить список определенных пространств имен


As Джордж Сталь написал, невозможно проверить пространство имен. Это связано с тем, что пространство имен не существует; существуют только структуры в пространствах имен. См. ниже пример:

namespace Foo;

class Bar {
}

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