オブジェクト指向プログラミングは、PHP で一般的に使用される方法であり、この記事では、PHP オブジェクト指向を使用する簡単な方法と、必要な基礎知識を紹介します。
(OOP) を開発します。オブジェクト指向開発には、プロセス指向開発に比べて多くの利点があります:
簡単なメンテナンス モジュール性はオブジェクト指向プログラミングの機能です。エンティティはクラスとして表され、同じ名前空間内の同じ機能を持つクラスとして表されるため、名前空間の他のメンバーに影響を与えることなく名前空間にクラスを追加できます。
拡張性 オブジェクト指向プログラミングは本質的に拡張性をサポートしています。特定の機能を備えたクラスがある場合、そのクラスを簡単に拡張して、拡張機能を備えたクラスを作成できます。
コードの再利用 機能はクラスにカプセル化されており、クラスは独立したエンティティとして存在するため、クラス ライブラリの提供は非常に簡単です。
複数の人が協力してプロジェクトを開発する方が適しているため、多くの大規模および中規模の Web サイトが開発に OOP を選択するようになりました。
それではオブジェクト指向プログラミングを紹介しましょう
プロパティとメソッドを含むクラス
PHP におけるクラス構文形式の定義:
コードは次のとおりです | コードをコピー |
class クラス名 [オプションの属性]{ public $property [=value];… // public を使用してパブリック識別子を宣言し、変数に値を割り当てることもできます 。 function functionname (args){ //クラスメソッドのメンバー関数 コード}… //クラスメソッド(メンバー関数) } |
オブジェクトの生成(クラスのインスタンス化): $object name=new classname( );
オブジェクトのプロパティの使用
クラスでは、特別なポインター $this にアクセスできます。クラス内の操作を通じて変数を設定またはアクセスするときは、$this->name を使用して参照します。
コードは次のとおりです | コードをコピー |
クラスの人{ |
1.決勝
Final: php5 は新しい Final キーワードを追加します。親クラスのメソッドがfinalと宣言されている場合、サブクラスはそのメソッドをオーバーライドできません。クラスがfinalと宣言されている場合、そのメソッドは継承できません。
コードは次のとおりです | コードをコピー |
クラスBaseClass{ パブリック関数テスト(){ ehco "テスト"; } 最終公開関数 moreTest(){ echo "moretest"; } } class ChildClass は BaseClass を拡張します{ パブリック関数 moreTest(){ echo "moretest"; } } // 致命的なエラーを生成します: 最終メソッド BaseClass::moretest() をオーバーライドできません |
2.__toString (PHP5.2 以降の使用を推奨)
コードは次のとおりです | コードをコピー |
クラスの人{ protected $name; protected $email; パブリック関数 setName($name){ $this->name = $name; } パブリック関数 setEmail($email){ $this->email = $email; } パブリック関数 __toString(){ return "$this->名前 <$this->メールアドレス>"; } } $rasums = 新しい人; $rasums->setName('test'); $rasums->setEmail('test@qq.com'); $rasums を印刷します; |
3.インターフェースと抽象クラス
インターフェイスの役割: クラスが特定の名前、可視性、およびプロトタイプを持つ 1 つ以上のメソッドを実装していることを確認したいと考えています。
インターフェース要件:
クラス内のすべてのメソッドは抽象メソッドです
抽象メソッドに抽象を追加する必要はありません
インターフェースの抽象メソッド属性は public です
メンバー属性は定数である必要があります
例:
コードは次のとおりです | コードをコピー |
インターフェース ChildTest{ パブリック関数 childTest(); } クラス FathTest は ChildTest1,ChildTest2{ を実装します パブリック関数 childTest(){ エコー 1; } ………… } |
抽象化の役割: 実際、抽象クラスとインターフェイス クラスは部分的に似ています。抽象クラスはクラス イメージの一部を抽出するという文をどこかで見た記憶があります。この文は一見滑稽に見えますが、実際には抽象クラスの真実を語っています。抽象クラスの役割は、クラスの多くが常に繰り返し記述している多くのメソッドを使用していることがわかった場合に、抽象クラスの使用を検討できることです。「クラスのすべてのパブリック関数を書き直すことはできない。 「このパブリック クラスをインスタンス化し、同じメソッドを呼び出します。」 これで問題ありません。実際、これは抽象クラスの動作ですが、インスタンス化のステップが省略され、次のようにすることができます。このクラス メソッドを直接呼び出すことも、このメソッドをオーバーロードすることもできます。
抽象的な要件:
クラスには少なくとも 1 つの抽象メソッドが必要です
抽象メソッドはabstractで追加する必要があります
例:
コードは次のとおりです | コードをコピー |
抽象クラス データベース{ 抽象パブリック関数 connect(); 抽象パブリック関数 query(); 抽象パブリック関数 fetch(); 抽象パブリック関数 close(); } |
注: 抽象メソッドは継承する必要があるため、プライベート メソッドまたは Final メソッドとして定義できません。
4. オブジェクト参照を渡す
php4: すべての「=」はコピーを作成します
php5: オブジェクトを除き、他の "=" に値を代入すると、オブジェクトが参照である間にコピーが作成されます。
5. オブジェクトのクローンを作成します
1.
集約クラス:
__call メソッドの概要:
__call は、クライアント コードがクラスで定義されていないメソッドを使用するときに呼び出されます。
__call() は 2 つのパラメータを受け入れます。1 つはメソッド名で、もう 1 つは呼び出されるメソッドに渡されるすべてのパラメータ (配列を含む) です
__call() メソッドによって返される値は、呼び出し元のメソッドが実際に存在するかのようにクライアントに返されます
例:
コードをコピー | |
クラスアドレス{
保護された $city;
パブリック関数 getCity(){return $this->city;}
protected $name;
$this->name = $name;
If(method_exists($this->アドレス,$method)){
$test2 = $test1 のクローンを作成します;
$test1->setCity('testcity1');
echo $test2->getName().'-'.$test2->getCity()."n"; |
コードは次のとおりです | コードをコピー |
クラスの人{ パブリック関数 __get($property){ パブリック関数 __set($property,$value){ $test = 新しい人; |
注:
これら 2 つのメソッドは、欠落している属性のみをキャプチャします。クラスの属性を定義すると、php はこの属性にアクセスするときに __get() と __set() を呼び出しません。
これら 2 つの方法は、プロパティ継承の概念を完全に破壊します。親オブジェクトに __get() メソッドがあり、サブクラスに独自の __get() メソッドを実装した場合、親クラスの __get() メソッドは呼び出されないため、オブジェクトは正しく実行されません。それはparent::__get()で解決できます
速度は比較的遅いです
マジック アクセサー メソッドを使用すると、phpdocumentor などのツールでコードを自動的に文書化できます
静的プロパティでは使用できません