ホームページ > バックエンド開発 > PHPチュートリアル > 第 18 章 オブジェクト指向の機能_PHP チュートリアル

第 18 章 オブジェクト指向の機能_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:29:22
オリジナル
920 人が閲覧しました

学習ポイント:
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 キーワード

PHP5 には、instanceof キーワードがあり、このキーワードを使用すると、オブジェクトがクラスのインスタンスであるか、クラスの

サブクラスであるか、または特定のインターフェイスを実装しているかを判断し、対応する操作を実行できます。

リーリー

2. OOP 継承

継承は、基本クラスから 1 つ以上のクラスを取得するためのメカニズムです。

別のクラスを継承したクラスをそのクラスのサブクラスと呼びます。この関係は、親と子の比喩でよく表されます。サブクラスは親クラスの特性を継承します。これらのプロパティは、プロパティとメソッドで構成されます。サブクラスは親クラスの機能を超えた新しい機能を追加できるため、サブクラスは親クラスの「拡張機能」とも呼ばれます。

PHP では、クラスの継承は extends キーワードによって実装されます。他のクラスから継承したクラスはサブクラスまたは派生クラスになり、サブクラスの継承元のクラスは親クラスまたは基本クラスになります。 (PHP は単一継承のみをサポートし、PHP はメソッドのオーバーロードをサポートしません)。

リーリー

フィールドやメソッドの書き換え(上書き)

親クラスのフィールドやメソッドが特に必要ない場合もあるので、サブクラスを書き換えることで親クラスの
フィールドやメソッドを変更することができます。

リーリー


サブクラスは親クラスのフィールドまたはメソッドを呼び出します

安全のため、通常は親クラスのメソッドをカプセル化し、外部から呼び出すことができず、それを継承するサブクラスからのみ参照できるようにします。このとき、サブクラス操作を通じて親クラスを呼び出す必要があります。 リーリー

オーバーライドして親クラスのメソッドを呼び出す

場合によっては、オーバーライドされたメソッドを通じて親クラスのメソッドの内容を呼び出すことができる必要があります。この場合、構文: 親クラス名::メソッドを使用する必要があります。 () または親 ::Method() を呼び出すことができます。 リーリー

final キーワードにより、クラスが継承されないようにすることができます。場合によっては、単に独立したクラスになりたいだけで、他のクラスから継承されたり使用されたりしたくない場合は、このキーワードを使用する必要があります。別のクラスである限り、このキーワードを追加することをお勧めします。

リーリー

抽象クラスとメソッド (抽象)

抽象メソッドは非常に特殊で、親クラスでのみ宣言されますが、子クラスで実装されます。抽象メソッドを宣言できるのは、抽象として宣言されたクラスのみです。

ルール:

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视频教程,本文仅限交流使用,不得用于商业用途,否则后果自负。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/776507.htmlTechArticle学习要点: 1.OOP 的封装 2.OOP 的继承 3.OOP 的多态 面向对象的三个主要特性是封装、继承和多态。 一.OOP的封装 隐藏对象的字段和实现细节...
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート