私は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);
ただし、このメッセージは常に表示されます。しかし、ライブラリは完全に機能しています。
助けてくれてありがとう!
class_exists
で名前空間全体を使用する必要があると思います。だから次のようなもの:
class_exists('Fetch\\Server')
George Steelが書いたように、名前空間をチェックすることは不可能です。これは、名前空間が存在するものではないためです。名前空間内には構造のみが存在します。以下の例を参照してください。
namespace Foo;
class Bar {
}
var_dump(class_exists('Foo')); // bool(false)
var_dump(class_exists('Foo\Bar')); // bool(true)
特定の名前空間の存在を直接確認することはできません。つまり、class_exists('Fetch\\SomeClass')
を行う必要があります。この質問も参照してください: 定義された名前空間のリストを取得することは可能ですか