プログラミング|オブジェクト|プロジェクト
PHP のオブジェクト指向プログラミング: 大規模 PHP プロジェクトの開発方法 (5)
著者: Luis Argerich 翻訳者: limodou
データストレージにはクラスを使用する
PHP と OOP の非常に良い点は、簡単に定義できることです。クラスを使用して何かを実行し、それを使用したいときにいつでも対応するクラスを呼び出します。ユーザーが製品 ID 番号を選択して製品を選択できる HTML フォームがあるとします。データベースに製品情報があり、その製品とその価格などを表示したい。さまざまな種類の製品があり、同じアクション
が製品ごとに異なる意味を持つ場合があります。たとえば、サウンドを表示するということは、それを再生することを意味する場合がありますが、他の種類の製品の場合は、データベースに保存されている画像を表示することを意味する場合があります。 OOP または PHP を使用してコーディングを減らし、品質を向上させることができます:
製品のクラスを定義し、それに必要なメソッド (例: 表示) を定義してから、製品から派生した製品のタイプごとにクラスを定義します
クラス その後(SoundItem クラス、ViewableItem クラスなど)、製品クラスのメソッドをオーバーライドして、希望どおりに動作するようにします。
データベース内の各製品の type フィールドに従ってクラスに名前を付けます。一般的な製品テーブルには (id、type、price、
description などのフィールド) がある場合があります。その後、処理スクリプトで、次の情報を取得できます。データベースから type 値を取得し、type という名前のオブジェクトをインスタンス化します
:
-------------------------------- -- ------------------------------------------------ -
$obj=new $type();
$obj->action();>----------------- -- ------------------------------------------------ -- ----------
これはPHPの非常に優れた機能で、オブジェクトの種類を考慮せずに$objの表示メソッドやその他のメソッドを呼び出すことができます。この手法を使用すると、新しいタイプのオブジェクトを追加するためにスクリプトを変更する必要はなく、それを処理するクラスを追加するだけで済みます。
この関数は非常に強力です。すべてのオブジェクトの型を考慮せずにメソッドを定義し、それらを異なるメソッドの異なるクラスに実装し、メイン スクリプトの任意のオブジェクトで使用します。if...else は必要ありません。二人のプログラマー、ただ幸せです。
プログラミングは簡単で、メンテナンスは安価で、再利用可能であるということに同意されましたか?
プログラマーのグループを管理する場合、仕事の割り当ては非常に簡単で、各人がオブジェクトの種類とそれを処理するクラスを担当することができます。
この技術を通じて国際化を実現できます。ユーザーが選択した言語分野に応じて対応するクラスを適用するだけです。
コピーとクローン
$obj のオブジェクトを作成するとき、$obj2=$obj によってオブジェクトをコピーできます。新しいオブジェクトは $obj のコピー (参照ではありません) なので、$ の状態になります。その時のオブジェ。場合によっては、これを実行したくない場合もあります。obj クラスのような新しいオブジェクトを生成したい場合は、 new ステートメントを使用してクラスのコンストラクターを呼び出すことができます。 PHP では、シリアル化と基本クラスを通じてこれを実現することもできますが、他のすべてのクラスは基本クラスから派生する必要があります。
危険ゾーンに入りましょう
オブジェクトをシリアル化すると、何らかの形式で文字列が得られます。興味がある場合は、その文字列にクラスの名前が付いていることを調べてください。次のように取り出すことができます:
----------------------------------------------------- ---------------------------------------------------- -
$herring=serialize($obj);
$vec=explode(':',$herring);
$nam=str_replace(""",'',$vec[2]) ;
?>- -------------------------------------- ------- ------------------------
それでは、「Universe」クラスを作成し、すべてのクラスが次から開始されるように強制するとします。ユニバース拡張では、次のようにユニバース
でクローン メソッドを定義できます:
-------------------------------- - ----------------------------------------
クラス Universe {
function clone() {
$herring=serialize($this);
$vec=explode(':',$herring);
$nam=str_replace(""",'' ,$vec[ 2]);
$ret=new $nam;
}
}
//次に
$obj=new Something()// ユニバースから展開
$other= $obj-> ;clone();
?>----------------------------------------------------- ----- -------------------------------------- -----
得られるものは、Something クラスの新しいオブジェクトで、new メソッドを使用してコンストラクターを呼び出して作成されたオブジェクトと同じです。これがうまくいくかどうかはわかりませんが、Universe クラスが派生クラスの名前を知っているというのは経験則です。限界があるのは想像力だけです。
注: 私は PHP4 を使用していますが、私が書いたものの一部は PHP3 では動作しない可能性があります。
PHPBuilder.comより転載