学習ポイント:
1.OOPカプセル化
2.OOP継承
3.OOPポリモーフィズム
オブジェクト指向の 3 つの主な機能は、カプセル化、継承、ポリモーフィズムです。
1つ。 OOP カプセル化
オブジェクトのフィールドと実装の詳細を非表示にし、インターフェイスのみを外部に公開し、プログラム内のフィールドの読み取りと変更のアクセス レベルを制御して、抽象化されたデータと動作 (または関数) を組み合わせて有機的な全体を形成します。 , データとデータを操作するためのソースコードを有機的に組み合わせて「クラス」を形成し、データも関数もそのクラスのメンバーとなることです。
フィールドの範囲
1.public パブリック (クラス外からアクセス可能)2.private Private (クラス内からアクセス可能)3.protected Protected (クラスおよびサブクラス内からアクセスできるが、外部からはアクセスできない)授業)見学)
リーリー
プライベート フィールドにアクセスする入り口としてパブリック メソッドを使用し、$this キーワードを使用する必要があります。
リーリー
属性操作(プライベートフィールドの代入と値取得)
2 つのパブリック メソッドを設計できます。1 つは値の割り当てに使用される setName() で、もう 1 つは値の取得に使用される getName() です。 リーリー
フィールドが 10 個ある場合、値の割り当てと取得には 20 のメソッドを使用する必要があります。 PHP には、値の取得と割り当て専用の 2 つの組み込みメソッド (インターセプター)、__set()、__get() があります。
リーリー
リーリー
提案: メソッドの前に修飾子がない場合、それは外部からアクセス可能な public メソッドですが、プログラムをより明確にするために、前に public を追加することをお勧めします。
定数
リーリー
静的クラスメンバー
場合によっては、クラスのすべてのインスタンスで共有されるフィールドとメソッドを作成する必要があります。これらのフィールドとメソッドは、クラスのすべてのインスタンスに関連しますが、特定のオブジェクトからは呼び出すことができません。
一般的に、フィールドは非公開にする必要があります。したがって、これを行う必要があるかもしれません:
リーリー
Instanceof キーワード
サブクラスであるか、または特定のインターフェイスを実装しているかを判断し、対応する操作を実行できます。
リーリー
2. OOP 継承
継承は、基本クラスから 1 つ以上のクラスを取得するためのメカニズムです。
PHP では、クラスの継承は extends キーワードによって実装されます。他のクラスから継承したクラスはサブクラスまたは派生クラスになり、サブクラスの継承元のクラスは親クラスまたは基本クラスになります。 (PHP は単一継承のみをサポートし、PHP はメソッドのオーバーロードをサポートしません)。
リーリー
フィールドやメソッドの書き換え(上書き)
親クラスのフィールドやメソッドが特に必要ない場合もあるので、サブクラスを書き換えることで親クラスの
フィールドやメソッドを変更することができます。
サブクラスは親クラスのフィールドまたはメソッドを呼び出します
安全のため、通常は親クラスのメソッドをカプセル化し、外部から呼び出すことができず、それを継承するサブクラスからのみ参照できるようにします。このとき、サブクラス操作を通じて親クラスを呼び出す必要があります。
リーリー
オーバーライドして親クラスのメソッドを呼び出す
場合によっては、オーバーライドされたメソッドを通じて親クラスのメソッドの内容を呼び出すことができる必要があります。この場合、構文: 親クラス名::メソッドを使用する必要があります。 () または親 ::Method() を呼び出すことができます。
リーリー
リーリー
抽象クラスとメソッド (抽象)
抽象メソッドは非常に特殊で、親クラスでのみ宣言されますが、子クラスで実装されます。抽象メソッドを宣言できるのは、抽象として宣言されたクラスのみです。
ルール:
1. 抽象クラスはインスタンス化できず、継承のみが可能です。2. 抽象メソッドはサブクラス メソッドによってオーバーライドされる必要があります。
リーリー
接口(interface)
接口定义了实现某种服务的一般规范,声明了所需的函数和常量,但不指定如何实现。
之所以不给出实现的细节,是因为不同的实体可能需要用不同的方式来实现公共的方法定
义。关键是要建立必须实现的一组一般原则,只要满足了这些原则才能说实现了这个接口。
规则:
1.类全部为抽象方法(不需要声明abstract)
2.接口抽象方法必须是public
3.成员(字段)必须是常量
<span>interface</span><span> Computer { </span><span>const</span> NAME = '联想120'<span>; </span><span>public</span> <span>function</span><span> run(); } </span><span>final</span> <span>class</span> NotebookComputer <span>implements</span><span> Computer { </span><span>public</span> <span>function</span><span> run() { </span><span>echo</span> '实现了接口的方法'<span>; } } </span><span>$notebookcomputer</span> = <span>new</span><span> NoteBookComputer (); </span><span>$notebookcomputer</span>-><span>run (); </span><span>echo</span> Computer::NAME;
子类可以实现多个接口
<span>interface</span><span> Computer { </span><span>const</span> NAME = '联想120'<span>; </span><span>public</span> <span>function</span><span> run(); } </span><span>interface</span><span> Notebook { </span><span>public</span> <span>function</span><span> book(); } </span><span>final</span> <span>class</span> NotebookComputer <span>implements</span> Computer,<span> Notebook { </span><span>public</span> <span>function</span><span> run() { </span><span>echo</span> '实现了接口的方法'<span>; } </span><span>public</span> <span>function</span><span> book() { </span><span>echo</span> '实现了接口的方法'<span>; } }</span>
三.多态
多态是指OOP 能够根据使用类的上下文来重新定义或改变类的性质或行为,或者说接
口的多种不同的实现方式即为多态。把不同的子类对象都当作父类来看,可以屏蔽不同子类
对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
<span>interface</span><span> Computer { </span><span>public</span> <span>function</span><span> version(); </span><span>public</span> <span>function</span><span> work(); } </span><span>class</span> NotebookComputer <span>implements</span><span> Computer { </span><span>public</span> <span>function</span><span> version() { </span><span>echo</span> '联想120'<span>; } </span><span>public</span> <span>function</span><span> work() { </span><span>echo</span> '笔记本正在随时携带运行!'<span>; } } </span><span>class</span> desktopComputer <span>implements</span><span> Computer { </span><span>public</span> <span>function</span><span> version() { </span><span>echo</span> 'IBM'<span>; } </span><span>public</span> <span>function</span><span> work() { </span><span>echo</span> '台式电脑正在工作站运行!'<span>; } } </span><span>class</span><span> Person { </span><span>public</span> <span>function</span> run(<span>$type</span><span>) { </span><span>$type</span>-><span>version (); </span><span>$type</span>-><span>work (); } } </span><span>$person</span> = <span>new</span><span> Person (); </span><span>$desktopcomputer</span> = <span>new</span><span> desktopComputer (); </span><span>$notebookcomputer</span> = <span>new</span><span> NoteBookComputer (); </span><span>$person</span>->run ( <span>$notebookcomputer</span> );
注:文章出自李炎恢PHP视频教程,本文仅限交流使用,不得用于商业用途,否则后果自负。