この記事では、オブジェクト指向 PHP におけるクラスの自動読み込み、オブジェクトのシリアル化、およびポリモーフィック アプリケーションの応用例を紹介します。詳しく知りたい学生は参照してください。
クラスの自動ロード
多くの開発者がオブジェクト指向アプリケーションを作成するとき、各クラスの定義用の PHP ソース ファイルを作成します。大きな煩わしさは、各スクリプトの先頭にインクルード ファイルの長いリスト (クラスごとに 1 つのファイル) を記述しなければならないことです。
ソフトウェア開発システムでは、すべてのクラスを PHP ファイルに記述することは不可能であり、別のファイルで宣言されたクラスを PHP ファイルで呼び出す必要がある場合は、そのファイルを include を通じて導入する必要があります。ただし、多くのファイルを含むプロジェクトでは、必要なクラスのすべてのファイルを 1 つずつインクルードするのが面倒な場合があります。では、このクラスを使用するときに、php ファイルをどこにインポートすればよいでしょうか。これがここで説明する自動読み込みクラスです。
PHP 5 では、まだ定義されていないクラスを使用しようとすると自動的に呼び出される __autoload() 関数を定義できます。この関数を呼び出すことで、スクリプト エンジンは必要なものをロードする最後の機会を得ることができます。 PHP がエラーで失敗する前に、__autoload() 関数によって受け取られるパラメータの 1 つは、ロードするクラスのクラス名であるため、プロジェクトで作業するときは、ファイル名を整理するときに特定のルールに従う必要があります。定義されたクラスの中心に置くのが最善ですが、xxx_classname.php、classname_xxx.php、classname.php などの統一されたプレフィックスまたはサフィックスを追加することもできます。この例では、MyClass1.php ファイルと MyClass2.php ファイルからそれぞれ MyClass1 と MyClass2 をロードしようとします。コードは次のとおりです。 。 Php '; load () 関数、パラメータ「MyClass1」を渡します
$obj = new MyClass1();
//MyClass2 クラスは存在しないため、自動的に __autoload() 関数を呼び出し、パラメータ「MyClass2」を渡します
$obj2 = 新しい MyClass2();
|
オブジェクトのシリアル化 送信を容易にするために、オブジェクト全体をバイナリ文字列に変換し、相手に届いたときに元に戻す必要がある場合があります。このプロセスは、車を船で米国に輸送したいのと同じように、シリアル化と呼ばれます。車は比較的大きいため、車を小さな部品に分解し、これらの部品を輸送することができます。船で米国に行き、米国でこれらの部品を車に組み立ててください。
オブジェクトをシリアル化する必要がある状況は 2 つあります。1 つ目は、オブジェクトがネットワーク経由で送信される場合であり、2 つ目は、オブジェクトがファイルまたはデータベースに書き込まれる場合です。
シリアル化には 2 つのプロセスがあります。1 つはオブジェクトをバイナリ文字列に変換するシリアル化であり、もう 1 つはオブジェクトをバイナリ文字列に変換する逆シリアル化です。変換されたバイナリ文字列は、unserialize() 関数を使用してオブジェクトを逆シリアル化します。この関数のパラメータはオブジェクト名であり、戻り値は文字列です。戻り値 文字列の意味はあいまいです。通常、オブジェクト情報を取得するために文字列を解析する必要はありません。返された文字列をネットワークの反対側に渡すか、コンポーネントに保存するだけです。
PHP の unserialize() 関数は、オブジェクトを逆シリアル化するために使用されます。この関数のパラメーターは、当然、再編成されたオブジェクトです
コードは次のとおりです。 コードをコピーします | |
class person{ //以下は人物のメンバー属性です var $name //人物の名前 var $sex //人物の性別 var $age; //その人の年齢
/ /属性 name $name、性別 $sex 、年齢 $age function __construct($name="", $sex="", $) に値を割り当てるコンストラクター メソッドのパラメーターを定義します。 age="") { $this-> ;name=$name; ; ) echo "私の名前は: ".$this->name." 性別: ".$this-& gt;セックス。」私の年齢は: ".$this->age."" ; } }
$p1=new person("张三", "男", 20);
$p1_string=serialize($p1) ; // オブジェクトをシリアル化し、文字列を返します echo $p1_string."" // 通常はシリアル化された文字列を解析しません
$p2=unserialize($p1_string) // シリアル化された文字列をオブジェクト $p2 に逆シリアル化します $p2->say();
ポリモーフィズムの応用 私の個人的な意見では、ポリモーフィズムは、カプセル化と継承に加えて、別のオブジェクト指向オブジェクトの 3 つの主要な特性の 1 つです。ただし、ポリモーフィズムは、C++ や Java と比べて実現できません。オブジェクト言語では、PHP 自体が弱い型付け言語であり、親クラスのオブジェクトをサブクラスのオブジェクトに変換したり、サブクラスのオブジェクトを親クラスのオブジェクトに変換したりする問題がないため、ポリモーフィズムはそれほど顕著ではありません。ポリモーフィズムの適用はそれほど明白ではありません。 ; いわゆるポリモーフィズムとは、複数の種類のオブジェクトを処理できるプログラムの機能を指します。たとえば、会社で働いている場合、財務部門は毎月、同じ賃金支払い方法を社内で異なる方法で使用できます。従業員または異なる役職の従業員はこの方法で支払われますが、支払われる賃金は同じではありません。したがって、同じ賃金の支払い方法がさまざまな形で現れます。オブジェクト指向プログラムのポリモーフィズムは、サブクラスのオブジェクトを親クラスの参照に割り当て、親クラスのメソッドを呼び出して、親クラスをオーバーライドするサブクラスのメソッドを実行することですが、PHP ではこれは弱く型指定されており、オブジェクト参照は親クラス参照またはサブクラス参照に関係なく、それらはすべて同じです。
まず例を見てみましょう。まず、ポリモーフィズムを使用するには、親クラスのオブジェクトとサブクラスのオブジェクトの間に関係が必要です。シェイプ インターフェイスまたは抽象クラスを親クラスとして作成します。その中には 2 つの抽象メソッドがあり、1 つは境界を見つけるもの、もう 1 つは領域を見つけるものです。このインターフェイスのサブクラスはさまざまなシェイプであり、それぞれが Shape です。 perimeter と area があり、親クラスがインターフェイスであるため、サブクラスは親クラスの perimeter と area の 2 つの抽象メソッドを実装する必要があります。これは、サブクラスがそれぞれ異なる形状にすべて準拠するようにするためです。親クラスのインターフェースの仕様に準拠し、周囲長と面積を計算するメソッドを備えています。
コードは次のとおりです | コードをコピー |
//サブクラスが実装するための 2 つの抽象メソッドを持つシェイプ インターフェイスを定義します interface Shape { Function area(); function perimeter( ; height)width; $> radius = $ radius; 3.14*$ This- & GT; }}}
// $shape=new Rect(5, 10);
echo $shape->area()." "; echo $shape->perimeter()."";
// サブクラスの円形オブジェクトをシェイプへの参照に割り当てます $shape=new Circular(10);
echo $shape->area( ).""; echo $shape->perimeter()." ";
上記例の実行結果: 長方形の面積: 50 長方形の周囲長: 30 円の面積: 314 円の周長: 62.8
について 3つについて詳しく紹介しました。理解できない場合は、Baiduで検索してください。
http://www.bkjia.com/PHPjc/444696.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/444696.html技術記事この記事では、オブジェクト指向 PHP で自動的にロードされるクラス オブジェクトのシリアル化とポリモーフィズムの応用例を紹介します。詳しく知りたい学生は参照してください。 クラスの自動ロード 多くの開発者...
|
|
|