PHPオブジェクト指向の上級学習(抽象クラ​​ス、インターフェース、final、クラス定数)_PHPチュートリアル

WBOY
リリース: 2016-07-21 15:18:19
オリジナル
900 人が閲覧しました

1. 抽象クラス (抽象)
実際の開発プロセスでは、一部のクラスはインスタンス化する必要がありません。たとえば、以前に学習した一部の親クラスは、主にサブクラスによって継承されます。これにより、コードの再利用が向上します。


コードをコピーします コードは次のとおりです:
abstract class class name {
property$name;
method(){} //メソッドは抽象修飾子 function method name(){ }



例:


コードをコピー コードは次のとおりです:
abstract class Animal{
public $name;
//抽象メソッドはメソッド本体を持つことができません。実装するサブクラス;
abstract public function cry();
//抽象クラスには抽象メソッドとインスタンス クラス メソッドを含めることができます
echo $this->name
}
}
class Cat{
public function cry(){
echo 'ok';
}
}


理解: 動物クラスは実際にはいくつかの動物の共通の属性と行動を規定する抽象的な概念ですが、実際にはそれらのプロパティや行動。別の例: 輸送クラス、プラント クラスなど。

注:
1. クラスが抽象で変更されている場合、そのクラスは抽象クラスです。メソッドが抽象で変更されている場合、そのメソッドは抽象メソッドです。抽象メソッドにはメソッド body => abstract function cry(); を含めることはできません
2. 抽象クラスはインスタンス化する必要はありませんが、クラスに抽象メソッドが含まれる場合、このクラスはインスタンス化する必要があります。
3. クラスが別の抽象クラスを継承する場合、サブクラスはその抽象クラス内のすべての抽象メソッドを実装する必要があります (それ自体も抽象クラスとして宣言されている場合を除く)。特定のクラスがそれらを使用する必要がある場合、これらのメソッドは特定の状況に従って書き出されます。
/ /属性、メソッド
// インターフェイス内のメソッドは、メソッド本体;
}
インターフェイスの実装方法
class クラス名はインターフェイス名 {
} を実装します
理解: インターフェイスはより抽象的な抽象クラスであり、抽象クラス内のメソッドです メソッド本体は存在できますが、インターフェイス内のメソッドはメソッドを持ってはなりません身体。このインターフェイスは、プログラミングのポリモーフィズムと、高い結合性と低い結合性の設計アイデアを実現します

例:



コードをコピーします

コードは次のとおりです:


//インターフェイスは、通常は小文字で仕様と属性を定義します。 i で始まります
interface iUsb{
public function start();
public function stop();
// カメラ クラスを記述してインターフェースを実装します // クラスがインターフェースを実装すると、クラスはインターフェースのすべてのメソッドを実装する必要があります class Camera は iUsb{ echo 'カメラ開始作業' }
パブリック関数 stop(){
echo 'カメラ停止作業'
}
}
//携帯電話クラスを作成します
class Phone は iUsb を実装します{
public function start(){
echo 'Phone Satrt Work'
}
public function stop(){
echo 'Phone Stop Work'
}
}
$c=新しいカメラ();
$c->start();
$p->start();
インターフェースを使用する場合:
1. 仕様を設定し、他のプログラマーに実装させる
2. 複数の並列クラスが異なる方法で実装する必要がある場合:
1. インターフェースをインスタンス化できない。インターフェイス内のすべてのメソッドに本体を含めることはできません。
2. クラスはカンマ (,) で区切って複数のインターフェイスを実装できます。クラス デモは if1,if2,if3{} を実装できます。
3. インターフェイス内には属性を含めることができます。定数には修飾子を含めることはできません (デフォルトは public 修飾子です)
例: インターフェース iUsb{
const A=90;
echo iUsb::A; 4. インターフェース内のメソッドはすべて public である必要があります。 、デフォルトは public です。
5. インターフェースは他のクラスを継承できませんが、複数の他のインターフェースを継承できます
例: インターフェース インターフェース名 extends if1,if2{}
6 、クラスは継承できます。親クラスを継承しながら他のインターフェースを継承します
例: class test extends testbaseimplements test1, test2{}

インターフェースの実装 VS 継承クラス
PHP 継承は単一継承です。つまり、クラスは 1 つの親クラスのみを継承できます。サブクラス関数の拡張に一定の影響を与えます。インターフェイスの実装は、継承されたクラスの補足として見ることができます。継承は階層関係であまり柔軟性がありませんが、インターフェイスの実装は水平関係であり、継承関係を壊すことなく特定の機能を拡張できます。


3. Final


1. クラスを他のクラスに継承させたくない場合は、final 構文を使用することを検討できます:
final class A{}
2. メソッドがサブクラスによってオーバーライドされないようにしたい場合は、メソッドの継承権限がパブリックな変更に依存するため、final を使用して変更することを検討できます。


コードをコピー

コードは次のとおりです:
class A{ final public function getrate($salary){ return $salary*0.08; }
}
class B extens A{
//getrate メソッドここの親クラスは Final を使用しているため、ここでは getrate をオーバーライドできません
//public function getrate($salary){
// return $salary*0.01;


3.属性を変更するため


4. クラス定数 (const)


場合によっては、次のような要件が存在する可能性があります: メンバー変数を変更したくないが、変数の値を固定したい場合、 const 定数を使用できます (const 名はすべて大文字にする必要があり、$ 記号を使用しないと修飾子を定数に追加できません)
構文:
const constant name = constant value; // 初期値を割り当てる必要があります。定数は変更できません
呼び出し:
クラス名::定数名 [この Self::定数名はクラス内で使用できます] またはインターフェイス名::定数名 //インターフェイスでは定数のみ使用でき、変数は使用できません
例:



コードをコピーします

コードは次のとおりです:


class A{
const TAX_RATE=0.08; function paytax($salary){ return $salary*self::TAX_RATE; } } $a=new A();
echo $a->paytax(100);

注:
1. 定数は特定のクラスに属します。オブジェクト



http://www.bkjia.com/PHPjc/325503.html

www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/325503.html
技術記事

1. 抽象クラス (abstract) 実際の開発プロセスでは、一部のクラスはインスタンス化する必要がありません。たとえば、以前に学習した一部の親クラスは主にサブクラスに継承され、改善される可能性があります。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート