0

クラス インスタンスからすべてのメソッドを抽出し、それらをグローバル空間で使用することは可能ですか?

私が持っているとしましょう:

class Library {
  public function num_one() { echo "number one"; }
  public function num_two() { echo "number two"; }
}

クラスをロードした後、インスタンスを指定せずに関数を使用できるようにしたい

include '/path/to/library-class.php';
$lib = new Library();

#$lib->num_one();
#$lib->num_two();

num_one();
num_two();
4

2 に答える 2

1

たとえば、それらを静的にすることができます

class Library {
    public static function num_one() { echo "number one"; }
    public static function num_two() { echo "number two"; }
}

その後、使用できます

Library::num_one()
Library::num_two()

「$lib = new Library();」も必要ありません。行:)

于 2012-10-11T23:34:28.787 に答える
0

OOP の利点の 1 つは、メソッドを名前空間に安全にカプセル化し、関数名の衝突を防ぐことであるため、なぜこれを行う必要があるのか​​わかりません。

ただし、絶対にこれを行う必要がある場合 (これを行う必要がないようにリファクタリングできるし、そうする必要があると思います)、それを行うことができます。これを /path/to/library-class.php に追加できます:

class Library {
    public function num_one() { echo "number one"; }
    public function num_two() { echo "number two"; }
}

$global_Library = new Library();

function num_one ($whateverParameter) {
    global $global_Library;
    return $global_Library->num_one($whateverParameter);
}
// Continue adding your wrapper functions here.

万能薬として扱われるべきではありませんが、静的メソッドを使用することは、あなたが求めていることよりも優れていると思います。

http://code.google.com/p/google-singleton-detector/wiki/WhySingletonAreControversial

于 2012-10-11T23:34:38.830 に答える