2016-06-22 3 views
1

まあ、静的メソッドをPHPで使用しないほうがいいと聞いていますが、それはある程度理解できますが、私には混乱があります。私が知りたいことは:PHPクラスをインスタンス化するとどうなりますか?

私は、私はアプリケーションを書く、私は何百ものクラスを定義する(または既に数百の異なるクラスを含むフレームワークを使用する)、私は私は小さなタスクごとにクラスを作成する必要があるかどうかわからないので、私はすべてを処理するためのクラスを作成する特定のアイテム(例えばブログ投稿)のCRUDタスクであり、このクラスは表示、保存、編集などを処理します。そのような場合、毎回クラスをインスタンス化すると、ほとんどのメソッドを含むオブジェクトが作成されますその要求には、その必要があります。 私は何を求めようとしているのでしょうか。

そんなことをするのが賢明ですか? メソッドを含むクラスを作成し、それぞれのリクエストでは使用しないメソッドを多く含み、非静的メソッドとして定義するので、オブジェクト全体をインスタンス化する必要があるたびに?

Laravelはコントローラーのように、特定のルートグループに関連するすべてのタスクを処理する非静的メソッドをすべて定義し、それらのメソッドの1つまたは2つにアクセスするたびにコントローラ全体をインスタンス化します。

時間と忍耐力に感謝します。 私はそれを感謝します。

+1

一般に、 "行動"ではなく、あなたがデザインするすべての "もの"に対してクラスを実装します。行為におけるオブジェクトのインスタンス化にはコストがかかりますが、それはクラスに実装されているメソッドの数やサイズに大きく依存しません。多くの場合、コードの可読性と再利用性の利点はより重要です。 – arkascha

答えて

1

ほとんどのフレームワークでは、CRUDがコントローラに書き込まれていることがわかります。これは、そうなるはずです。

コントローラ1つに複数のアクション(作成、読み取り、更新、削除)があります。これらのメソッドがすべて呼び出されて実行されるわけではありません。あなたのブログ記事を読んでみたいのであれば、実行されるのは読み込みアクションだけです。

あなたはそれを自動車と比較することができます。 1つのガレージに複数の「車」を格納することはできますが、一度に1つの車しか運転することはできません。

さらに詳しい情報を追加します。あなたはクラスのインスタンスを作成する場合:

$class = new myClass(); 

を(存在する場合)と呼ばれる唯一のものはconstructorです。

このクラスのインスタンスを作成すると、実際にはすべてのメソッドが実行されるわけではありません。それらを使用できるようにするだけです。

+0

それは確かにそれをパースペクティブに置いています。ありがとう、ピーター。 – Arsi

関連する問題