ホームページ  >  記事  >  バックエンド開発  >  PHP 抽象クラス、インターフェイス、final、およびクラス定数に関する高度な学習チュートリアル

PHP 抽象クラス、インターフェイス、final、およびクラス定数に関する高度な学習チュートリアル

伊谢尔伦
伊谢尔伦オリジナル
2017-06-29 09:22:481036ブラウズ

PHP オブジェクト指向の高度な学習、主に抽象クラス、インターフェイス、final、クラス定数に関する情報を含みます

1. 抽象クラス (抽象)
実際の開発プロセスでは、一部のクラスは必要ありません。たとえば、以前に学習した一部の親クラスは主にサブクラスに継承され、コードの再利用性が向上します。一部の動物の行動や行動を表しますが、実際には動物そのものにはそれらの属性や行動はありません。別の例: 車両、植物など。

注:

1. クラスが抽象で変更されている場合、そのクラスは抽象メソッドです。メソッド body => 抽象関数 cry(); は持てません

2. 抽象クラスは抽象メソッドを必要としませんが、クラスに抽象メソッドが含まれている場合は、このクラスを次のように宣言する必要があります。抽象クラス;

3. クラスが別の抽象クラスを継承する場合、サブクラスはその抽象クラス内のすべての抽象メソッドを実装する必要があります (それ自体も抽象クラスとして宣言されている場合を除く)。特定のクラスがそれらを使用する必要がある場合、これらのメソッドは特定の状況に従って書き出されます。

/ /属性、メソッド

// インターフェイス内のメソッドはメソッド本体を持つことができません。 ;
}
インターフェイスの実装方法
class クラス名はインターフェイス名を実装します {

} 理解: インターフェイスはより抽象的な抽象クラスであり、抽象クラス内のメソッドはメソッド本体を持つことができますが、インターフェイス内のメソッドにはメソッド本体があってはなりません。インターフェイスは、プログラミングの多態性と、高い結合性と低い結合性の設計アイデアを実現します。
例:

abstract class 类名{ 
属性 $name; 
方法(){} //方法也可以为abstract 修饰符 function 方法名(){} 
}

インターフェイスを使用する場合:
1. 仕様を設定し、他のプログラマーに実装させる必要がある場合
2.特定の関数を実装しますが、実装メソッドは異なります。
1. インターフェイスをインスタンス化することはできず、インターフェイス内のすべてのメソッドに本体を持たせることはできません。 2. 1 つのクラスで複数のインターフェイスをカンマで区切って実装できます。 ,) クラスデモは if1,if2,if3{} を実装します
3. インターフェイスはプロパティを持つことができますが、定数は修飾子を持つことができません (デフォルトは public 修飾子です)
例:interface iUsb{
const A= 90;
}
echo iUsb::A;
4. インターフェース内のすべてのメソッドはパブリックである必要があります。
5. インターフェースは他のクラスを継承できます。他の複数のインターフェイスを継承できます

例: インターフェイス インターフェイス名

extends
if1,if2{}
6. クラスは親クラスを継承しながら他のインターフェイスを継承できます
例: class test extends testbaseimplements test1, test2{}

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


3. Final


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

abstract class animal{ 
public $name; 
public $age; 
//抽象方法不能有方法体,主要是为了让子类去实现; 
abstract public function cry(); 
//
抽象类
中可以包含抽象方法,同时也可以包含实例类方法 
public function getname(){ 
echo $this->name; 
} 
} 
class Cat{ 
public function cry(){ 
echo 'ok'; 
} 
}
3. Final は使用できません 変更された属性

4. クラス定数 (const)


場合によっては、次のような要件があるかもしれません。変数の値を固定するには、const 定数を使用します (const 名は $ 記号を付けずにすべて大文字にする必要があり、定数は変更できません)
構文:
const constant name = 定数値; // 初期値。定数は変更できないため、値を割り当てる必要があります 呼び出し :
クラス名::定数名 [self::定数名はこのクラス内で使用できます] またはインターフェイス名::定数名 // インターフェイスでは定数のみ使用できます。変数は使用できません
例:

//接口是定义规范、属性的,一般以小写的i开头; 
interface iUsb{ 
public function start(); 
public function stop(); 
} 
//编写相机类,让它去实现接口 
//当一个类实现了某个接口,那么该类就必须实现接口的所有方法 
class Camera implements iUsb{ 
public function start(){ 
echo 'Camera Start Work'; 
} 
public function stop(){ 
echo 'Camera Stop Work'; 
} 
} 
//编写一个手机类 
class Phone implements iUsb{ 
public function start(){ 
echo 'Phone Satrt Work'; 
} 
public function stop(){ 
echo 'Phone Stop Work'; 
} 
} 
$c=new Camera(); 
$c->start(); 
$p=new Phone(); 
$p->start();

注:
1. 定数はサブクラスに継承できます
2. 定数はオブジェクトではなく、特定のクラスに属します

以上がPHP 抽象クラス、インターフェイス、final、およびクラス定数に関する高度な学習チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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