1

エイリアスを使用していくつかの長いクラス名の省略形を提供するために、クラスに名前空間を付けました。

namespace some_namespace;
use \VeryLongClassnameWhichIUseOften as Short;

class MyClass {
  public static method do_stuff() {

    Short::do_something(Short::do_other_stuff());

  }
}

MyClassこれで、グローバル名前空間で期待されるサードパーティのコードがいくつかあります。

MyClassどういうわけかグローバル名前空間にエクスポートできますか?

私は試した

class \MyClass {
  ...
}

しかし、明らかにそれは許可されていません(予期しないT_NS_SEPARATOR、T_STRINGを期待しています)。

私もこれを試しました:

namespace some_namespace {
  use \VeryLongClassnameWhichIUseOften as Short;

  class MyClass {
    ...
  }
}

namespace {
  use \some_namespace\MyClass as MyClass;
}

これは追加のエラーをスローしませんが、MyClassはまだグローバル名前空間で使用できません(クラス'MyClass'が見つかりません)。理由がよくわかりません。

4

1 に答える 1

3

これをグローバル名前空間に配置します。

use \some_namespace\MyClass as MyClass;

私はそれがうまくいくはずだと信じています。

編集:そうではありません。これは機能するはずです:

class_alias('\some_namespace\MyClass', 'MyClass');
于 2012-12-23T03:36:58.583 に答える