web-dev-qa-db-ja.com

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 \Fetch\Server($server, $port);

ただし、このメッセージは常に表示されます。しかし、ライブラリは完全に機能しています。

助けてくれてありがとう!

14
Maxim Seshuk

class_existsで名前空間全体を使用する必要があると思います。だから次のようなもの:

class_exists('Fetch\\Server')
26
ars265

George Steelが書いたように、名前空間をチェックすることは不可能です。これは、名前空間が存在するものではないためです。名前空間内には構造のみが存在します。以下の例を参照してください。

namespace Foo;

class Bar {
}

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

特定の名前空間の存在を直接確認することはできません。つまり、class_exists('Fetch\\SomeClass')を行う必要があります。この質問も参照してください: 定義された名前空間のリストを取得することは可能ですか

4
George Steel