12

PHP のクラスのメソッド内で class_exists() を使用しようとすると、クラスの完全な名前を指定する必要があります。現在の名前空間は考慮されません。たとえば、私のクラスが次の場合:

 <?
    namespace Foo;

    class Bar{
       public function doesBooClassExist(){
            return class_exists('Boo');
       }
    }

Boo はクラス (適切に自動ロードする) であり、次のようになります。

   namespace Foo;

    class Boo{
       // stuff in here
    }

私が試してみると:

$bar = new Bar();
$success = $bar->doesBooClassExist();
var_dump($success);

あなたはfalseを取得します...完全なクラス名(つまりclass_exits('Foo\Boo'))を明示的に指定せずにこれを行う別の方法はありますか?

4

1 に答える 1

24

5.5 より前では、これを行う最善の方法は、常に完全修飾クラス名を使用することです。

public function doesBooClassExist() {
    return class_exists('Foo\Boo');
}

難しいことではなく、何を指しているのかが明確になります。読みやすさを重視する必要があることを忘れないでください。名前空間のインポートは書き込みには便利ですが、読み取りが混乱します (コードを読むときに現在の名前空間とすべてのインポートを念頭に置く必要があるため)。

ただし、5.5 では、新しい構造が登場します。

public function doesBooClassExist() {
    return class_exists(Boo::class);
}

class疑似マジック定数は任意の識別子に置くことができ、解決される完全修飾クラス名を返します........

于 2013-04-05T17:31:00.657 に答える