クラスの役割
1 オブジェクトをインスタンス化する
2 他のクラスの基底クラスとして継承される!
3 静的メンバーを呼び出します
2 つの主な関数: オブジェクトのインスタンス化と継承。
1 つの機能を持つ 2 つの特別なクラスがあります。
1、** はオブジェクトのインスタンス化のみが可能であり、継承することはできません。 **最終クラス
2 は継承のみが可能で、オブジェクトをインスタンス化できません。抽象クラス
最終クラスと最終メソッド
最終クラスは継承チェーンの最後のリンクであり、サブクラスを持つことはできません
final class End{ } class Test extends End{ }
运行结果:报错 PHP Fatal error: Class Test may not inherit from final class (End) in /usercode/file.php on line 7
finalメソッド、制限メソッドはサブクラスによってオーバーライドできません
<?php class AmParent{ final public function end_func(){ echo '我是final方法'; } } class AmChild extends AmParent{ public function end_func(){ echo '我是子类,我想重写final方法,可是报错了'; } }
运行结果:报错 PHP Fatal error: Cannot override final method AmParentt::end_func() in /usercode/file.php on line 11
抽象クラス、抽象クラス
よりも優れています通常のクラス (クラス定数、静的プロパティ、静的メソッド、非静的プロパティ、非静的メソッド) もう 1 つ、抽象メソッドがあります。これは、抽象メソッドを実装するために非抽象サブクラスを必要とします。
抽象メソッド: {} がない場合、メソッドのみの宣言と呼ばれます。パラメータを持つことができます。
abstract public function abstract_func($arg1,$arg2)
//不能实例化对象 <?php abstract class AmParent{ abstract public function abstract_func($arg1,$arg2); } $amParent=new AmParent;
运行结果: PHP Fatal error: Cannot instantiate abstract class AmParent in /usercode/file.php on line 5
継承できるのは 2 つの状況です:
1. サブクラスが抽象クラスである
2. サブクラスは抽象クラスではなく、親クラスのすべての抽象メソッド (およびメソッド本体 {}) を実装する必要があります。 )。
<?php abstract class AmParent{ abstract public function abstract_func($arg1,$arg2); } class AmChild extends AmParent{ }
运行结果,报错: PHP Fatal error: Class AmChild contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AmParent::abstract_func) in /usercode/file.php on line 6エラーは報告されません:
1 抽象クラスになるように抽象を追加します
<?php abstract class AmParent{ abstract public function abstract_func($arg1,$arg2); } abstract class AmChild extends AmParent{ }2 抽象メソッドを実装します
<?php abstract class AmParent{ abstract public function abstract_func($arg1,$arg2); } class AmChild extends AmParent{ public function abstract_func($arg1,$arg2){ echo $arg1.$arg2; } } $amChild=new AmChild; $amChild->abstract_func( 'have implemented ',' abstract_func ');
运行结果,报错: have implemented abstract_func使用法の意味
抽象クラスは、その非抽象サブクラスが同じ名前を持つメソッドを持つ必要があると規定していますが、メソッドは本体は異なる場合があります。
<?php abstract class Goods{ abstract public function sayName(); } class Books extends Goods{ public function sayName(){ echo '我是一本书的名字<br/>'; } } class Mobiles extends Goods{ public function sayName(){ echo '我是一部手机的名字<br/>'; } } $book1=new Books; $book1->sayName(); $mobile1=new Mobiles; $mobile1->sayName();
运行结果: 我是一本书的名字 我是一部手机的名字インターフェイス構造:
クラス (オブジェクト) が持つ必要があるパブリック メソッド (インターフェイス メソッド) を制限するために使用されます。
<?php interface iGoods{ const PAI=3.14; public function sayName(); public function sayPrice(); }インターフェイスには、パブリック抽象メソッド (不完全なメソッド) と定数のみを含めることができます。
implementsimplements
インターフェイス構造を実装するクラスには、インターフェイスで定義された抽象メソッドが含まれます。
2 つのオプション、1 抽象クラスとして定義する、2 インターフェイス メソッドを実装する!
//1定义成抽象类 abstract class Books implements iGoods{ abstract public function sayName(); abstract public function sayPrice(); }
//2实现接口方法 class Books implements iGoods{ public function sayName(){ echo '我实现了接口方法'; } public function sayPrice(){ echo '我实现了接口方法'; } }抽象クラスとインターフェースの違いを比較してください:
1 抽象クラスと通常のクラスの間には継承関係があります。
まず、共通クラスは抽象クラスの既存の通常のメンバーを取得できます。実装する必要がある 抽象メソッド (必ずしも public である必要はない)
2. インターフェースと通常のクラスの間には実装関係があります。
通常のクラスはインターフェイスを実装し、実装されていないパブリック メソッドのみを実装できます。
3. インターフェイスはパブリック メソッドと定数を定義するためにのみ使用されます。そして、抽象クラスは何でも持つことができます。
4. 複数のインターフェースの実装。クラスは同時に複数のインターフェイスを実装できます
<?php interface iA{ const PAI=3.14; public function sayA(); } interface iB{ public function sayB(); } class C implements iA,iB{ public function sayA(){ } public function sayB(){ } }
//用class_exists(@param string),判断类是否存在 var_dump(class_exists('C')); var_dump(class_exists('iA'));rree
上記は、PHP オブジェクト指向構文 5 の最終クラス、抽象クラス、インターフェイス構造 (クラスではありません) の内容です。その他の関連内容については、PHP 中国語 Web サイト (www.php.cn) を参照してください。 !