2

5.4より前のバージョンのPHPでは、静的クラスを使用してオブジェクトをインスタンス化し、必要な関数をすぐに呼び出しました。次に例を示します。

$result = Foo::init()->bar();

上記の例では、静的関数init()は、それが含まれているクラスをインスタンス化し、オブジェクトとして返します。これにより、メソッドチェーン機能が提供さbar()れ、すべて1行のコードですぐに呼び出すことができます。静的関数は次のinit()ようになります。

static public function init() {
   $object = new self();
   return $object;
}

PHP 5.4では、インスタンス化時のクラスメンバーアクセスのサポートが追加され、静的クラスを使用する代わりに、次のことができるようになりました。

$result = (new Foo)->bar();


私の質問:静的クラスを使用する私の古い方法は悪いですか?もしそうなら、なぜですか?PHPがインスタンス化でのクラスメンバーアクセスをサポートするようになったので、これはオブジェクトインスタンス化の直後にクラスメンバーにアクセスするためのより正しい方法ですか?

4

2 に答える 2

3

はい、新しい方法の方が正しいので、可能であればそれを使用してください。ただし、以前の方法は「悪い」ものではありません。これは、苛立たしい問題に対するクリーンでシンプルなソリューションです。

于 2012-07-01T20:48:56.633 に答える
1

それがすべてである場合->init()、あなたは逃げることができます(new Foo)->bar();、しかしあなたが依存性注入ルートに行くとき、あなたはおそらくインスタンス化で「それらの依存関係を注入する」ためにある種のファクトリを作成したいと思うでしょう。ファクトリは、本格的なインスタンス化されたオブジェクト、または初心者向けの静的メソッドの場合がありますが、実際のところ、クラス(データベースハンドラー、設定)に現在または将来的に外部アクセスを注入する必要がある場合は、グローバルまたはシングルトン(一種のグローバル...)を悪用したい場合は、オブジェクトがコードベースに散在するのではなく、インスタンス化される1つのメソッド/クラスがあることに非常に感謝します。

于 2012-07-01T21:24:36.790 に答える