ホームページ  >  記事  >  バックエンド開発  >  php オブジェクト指向の基本

php オブジェクト指向の基本

WBOY
WBOYオリジナル
2016-07-25 09:07:35748ブラウズ
  1. class person
  2. {
  3. //以下は人物のメンバー属性です
  4. var $name //人物の名前
  5. var $***; // the person
  6. var $age ; //その人の年齢
  7. //以下は person のメンバーメソッドです
  8. function Say() //この人が話すことができるメソッド
  9. {
  10. echo "この人は話しています";
  11. }
  12. function run() //この人 歩くことができるメソッド
  13. {
  14. echo "この人は歩いています";
  15. }
  16. }
  17. ?>
コードをコピー

3.5. インスタンス化する方法オブジェクト

上で述べたように、PHP オブジェクト指向プログラムの単位はオブジェクトですが、オブジェクトはクラスによってインスタンス化されます。クラスが宣言されるので、次のステップはオブジェクトをインスタンス化することです。クラスを定義した後、new キーワードを使用してオブジェクトを生成します。 $オブジェクト名 = 新しいクラス名(); オブジェクト->プロパティ$p1->名前$p2->年齢; オブジェクト->メソッド $p1->say(); $p2->run();

5.7. 特別な参照「$this」の使用 これで、オブジェクト内のメンバーにアクセスする方法がわかりました。これは、「Object->Member」メソッドを通じてアクセスされます。では、オブジェクト内のメソッドがオブジェクト内のこのオブジェクトのプロパティにアクセスできるようにしたい場合、またはオブジェクト内のメソッドがこのオブジェクトの他のメソッドを呼び出せるようにしたい場合は、どうすればよいでしょうか。オブジェクト内のすべてのメンバーは、オブジェクトの内部メンバー間の呼び出しを含め、オブジェクトを使用して呼び出される必要があるため、PHP はこのオブジェクトへの参照 $this を提供し、各オブジェクトにはこのオブジェクトへの参照が含まれます。 this の本来の意味は「this」です。上の例では、オブジェクトを表す 3 つのインスタンス オブジェクト $P1、$P2、および $P3 が存在します。 $p1、$p2、$p3。

  1. class person
  2. {
  3. //以下は人物のメンバー属性です
  4. var $name //人物の名前
  5. var $***;その人の年齢
  6. var $ age; //その人の年齢
  7. //以下はその人のメンバーメソッド
  8. function Say() //この人が話すことができるメソッド
  9. { echo "私の名前は: ".$this-> ;名前。" 性別: ".$this->***。" 私の年齢: ".$this->age."
  10. ";
  11. }
コードをコピー

8.構築方法と破壊方法 ほとんどのクラスには、コンストラクターと呼ばれる特別なメソッドがあります。オブジェクトが作成されると、自動的にコンストラクターが呼び出されます。つまり、 new キーワードを使用してオブジェクトをインスタンス化すると、コンストラクターが自動的に呼び出されます。

コンストラクターの宣言は、名前が __construct() でなければならないことを除いて、他の操作の宣言と同じです。これは PHP5 での変更です。以前のバージョンでは、コンストラクターの名前はクラス名と同じである必要がありました。これは PHP5 でも引き続き使用できますが、この利点は、コンストラクターをクラス名と同じにすることができることです。クラス名に関係なく、クラス名が変更された場合でも、対応するコンストラクター名を変更する必要はありません。下位互換性のために、クラスに __construct() という名前のメソッドがない場合、PHP はクラス名と同じ名前で php4 で記述されたコンストラクター メソッドを検索します。 形式: function __construct ([パラメータ]) { ... ... } クラス内で宣言できるコンストラクターは 1 つだけですが、コンストラクターはオブジェクトが作成されるたびに 1 回しか呼び出されないため、このメソッドはアクティブに呼び出すことができないため、通常はいくつかの便利な初期化タスクを実行するために使用されます。たとえば、オブジェクトの作成時に、対応するプロパティに初期値が割り当てられます。

  1. //人間の
  2. クラスを作成します
  3. {
  4. //以下は人物のメンバー属性です
  5. var $name //人物の名前
  6. var $*** ; //人の性別
  7. var $age; //人の年齢
  8. //名前$name、性別$***、年齢としてコンストラクターパラメータを定義 $age
  9. function __construct($name, $***, $age )
  10. {
  11. //構築メソッドを通じて渡された $name には、メンバー属性 $this->name
  12. $this->name=$name;
  13. // 渡された $*** の初期値が割り当てられます構築メソッドを通じて渡されたメンバー属性 $this->*** には初期値が割り当てられます
  14. $this->***=$***;
  15. //構築メソッドを通じて渡された $ageメンバー属性にメソッドを代入 $this->age 初期値
  16. $this->age=$age;
  17. }
  18. //この人の話し方
  19. functionsay()
  20. {
  21. echo "私の名前は: " .$this->name." 性別: ".$this->***." 私の年齢: ".$this->age."
  22. ";
  23. }
  24. }
  25. // オブジェクトを 3 つ作成します$p1、p2 は構築メソッド $p3 を介してそれぞれ、名前、性別、年齢の 3 つの異なる実際のパラメータを渡します
  26. $p1=new person("Zhang San", " Male", 20); ("李思", "女性", 30);
  27. $p3=new person("王五","男性", 40);
  28. //以下は $p1 オブジェクトの発話メソッドにアクセスします
  29. $p1- >say();
  30. / /以下は $p2 オブジェクトの発話メソッドにアクセスします
  31. $p2->say();
  32. //以下は $p3 オブジェクトの発話メソッドにアクセスします
  33. $p3-> Say();
  34. ?>
コードをコピーします
出力結果は次のとおりです。 私の名前:Zhang San 性別:男性 私の年齢:20 私の名前は: Li Si 性別: 女性 私の年齢: 30 私の名前:王呉 性別:男性 年齢:40歳

コンストラクターの反対はデストラクターです。デストラクタは、PHP5 で新しく追加された内容です。PHP4 にはデストラクタはありません。デストラクターを使用すると、クラスを破棄する前に、ファイルを閉じる、結果セットを解放するなど、一部の操作を実行したり、一部の機能を完了したりできます。デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに削除されます。オブジェクトがメモリ内で破棄されるときに実行されます。つまり、デストラクタは、オブジェクトがメモリ内で破棄される前に呼び出されます。コンストラクターの名前と同様に、クラスのデストラクターの名前は __destruct() でなければなりません。デストラクターはパラメータを取ることができません。 形式: function __destruct ( ) { ... ... }

  1. //人間の

  2. クラスを作成します
  3. {
  4. //以下は人のメンバー属性です
  5. var $name //人の名前
  6. ; var $** *; //人の性別
  7. var $age //人の年齢
  8. //コンストラクターメソッドのパラメータをname$name、gender$***、age$ageとして定義します

  9. Function __construct ($name, $***, $age)

  10. {
  11. //コンストラクターを通じて渡された $name には、メンバー属性 $this->name
  12. $this->name= に初期値が割り当てられます。 $name;
  13. //構築メソッドを通じて渡された $*** には、メンバー属性に初期値が割り当てられます $this->***
  14. $this->***=$***;
  15. //構築メソッドを通じて渡されます $age はメンバー属性に初期値を割り当てます $this->age
  16. $this->age=$age;
  17. }
  18. //この人の話し方
  19. function Say( )
  20. {
  21. echo "私の名前 私の名前は: ".$this->name." 性別: ".$this->***." 私の年齢: ".$this->age."
  22. ";
  23. }
  24. // これはオブジェクトが破棄される前に呼び出されるデストラクターです
  25. function __destruct()
  26. {
  27. echo "Goodbye".$this->name."
  28. ";
  29. }
コードをコピー

クラスの外にインターフェイスを提供する場合、クラスの外にプライベート属性の設定メソッドと取得メソッドを提供して、プライベート属性を操作できます。例: prvate $age;

  1. function setAge($age) //外部から年齢を設定するためのパブリックメソッドを提供する
  2. {
  3. if($age<0 || $age>130) //属性に値を割り当てるとき、順番に属性に不正な値が設定されることを避けるため
  4. return;
  5. $this->age=$age;
  6. }
  7. function getAge() //年齢を外部から取得するパブリックメソッドを提供する
  8. {
  9. return($this-> ;age);
  10. }
コードをコピーします

もちろん、同じメソッドを使用して各属性の値を割り当てたり取得したりすることもできます。授業の外で操作を完了します。 JAVABEANも同じです! ! !

10. __set() __get() __isset() __unset() の 4 つのメソッドの適用

一般的に言えば、クラス属性は常にプライベートとして定義され、これはより現実的なロジックに沿っています。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では、属性を取得して代入するための「__get()」と「__set()」、および属性を確認するための「__isset()」という 2 つの関数があらかじめ定義されています。属性を削除するメソッド「__unset()」。 前のセクションでは、各属性の設定および取得メソッドを説明しました。PHP5 には、属性の値を設定および取得するための特別なメソッド「__set()」および「__get()」メソッドが用意されています。これらの 2 つのメソッドは存在しません。デフォルトでは、これらのメソッドは、コンストラクター メソッド (__construct()) と同様に、クラスに追加された場合にのみ存在します。もちろん、次の方法で追加できます。個人のスタイルに応じて追加することもできます。

  1. //__get() メソッドはプライベート プロパティを取得するために使用されます

  2. プライベート関数 __get($property_name)
  3. {

  4. if(isset($this- > ;$property_name))

  5. {
  6. return($this->$property_name);
  7. }else
  8. {
  9. return(NULL);
  10. }
  11. }
  12. //__set() メソッドはプライベート プロパティを設定するために使用されます
  13. private function __set ($property_name, $value)
  14. {
  15. $this->$property_name = $value;
  16. }
コードをコピー

__get() メソッド: このメソッドはプライベート メンバー属性値を取得するために使用されます。パラメーターは取得したいメンバー属性の名前で渡され、取得された属性値が返されます。このメソッドは、プライベート プロパティが直接取得されるときにオブジェクトによって自動的に呼び出されるプライベート メソッドにすることもできるため、手動で呼び出す必要はありません。 private プロパティはカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name" で直接取得するのは誤りです) が、このメソッドをクラスに追加する場合は、"echo $p1->" を使用してください。 name". $p1->name" このようなステートメントが値を直接取得すると、自動的に __get($property_name) メソッドが呼び出され、プロパティ名がパラメータ $property_name に渡され、このメソッドの内部実行を通じて、渡したプライベートプロパティの値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。 __set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは、値を設定する属性の名前です。属性に設定された値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに自動的に呼び出されます。__set() メソッドが存在しない場合は、このメソッドは呼び出されません。例: $this->name='zhangsan' の場合はエラーになりますが、クラスに __set($property_name, $value) メソッドを追加すると、プライベート プロパティに値を直接代入するときに、が自動的に呼び出され、name などの属性を $property_name に渡し、代入する値 "zhangsan" を $value に渡します。このメソッドの実行により、代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。

  1. class Person
  2. {
  3. //以下は個人のメンバー属性であり、すべてカプセル化されたプライベートメンバーです
  4. private $name //個人の名前
  5. private $*; **; / /人の性別
  6. private $age; //人の年齢
  7. //__get()メソッドはプライベートプロパティを取得するために使用されます
  8. プライベート関数__get($property_name)
  9. {
  10. echo "プライベートプロパティの値を直接取得するときに自動的に呼び出されますこの __get() メソッドを取得しました
  11. ";
  12. if(isset($this->$property_name))
  13. {
  14. return($this->$property_name);
  15. }
  16. else
  17. {
  18. return(NULL);
  19. }
  20. }
  21. //__set() メソッドはプライベート プロパティの設定に使用されます
  22. プライベート関数 __set($property_name, $value)
  23. {
  24. echo "プライベート プロパティ値を直接設定する場合、この __set() メソッドが自動的に呼び出されます。 value to a private property
  25. ";
  26. $this->$property_name = $value;
  27. }
  28. }
  29. $p1=new Person();
  30. //値をプライベート プロパティに直接割り当てる操作は自動的に呼び出されます__set() 値を代入するメソッド
  31. $p1->name="張三";
  32. $p1->***="男性";
  33. $p1->age=20;
  34. //値を取得プライベート属性を直接取得すると、__get() メソッドが自動的に呼び出され、メンバー属性の値が返されます
  35. echo "Name:".$p1->name."
  36. ";
  37. echo "Gender:".$p1 ->***."
  38. ";
  39. echo "年齢:".$p1->age."
  40. ";
  41. ?>
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。