ホームページ  >  記事  >  バックエンド開発  >  PHP でのオーバーライド

PHP でのオーバーライド

WBOY
WBOYオリジナル
2024-08-29 12:59:101102ブラウズ

オーバーライドは、PHP のクラス、オブジェクト、カプセル化、ポリモーフィズム、オーバーロードなどの概念に似たオブジェクト指向プログラミングの概念です。関数とクラスのオーバーライドは、基本クラスまたは親クラスのメソッドと同じ派生クラスのメソッドが作成されるときに行われます。これらのメソッドはどちらも同じ名前と同じ数の引数を持ちます。

広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

オーバーライドはどのように機能しますか?

PHP でオーバーライドがどのように機能するかを見てみましょう。

  • オーバーライドは、基本クラスの派生クラスが基本クラスと同じ動作を実行する概念です。このオーバーライドはメソッドまたはクラスに対して行うことができます。メソッドをオーバーライドする場合、メソッドの名前、パラメータ、アクセス指定子は、親クラスのメソッドのものと同じであることがわかります。基本クラスから派生したサブクラスのメソッドの実装に変更が見られない場合、その時点で、サブクラスのメソッドが基本クラスのメソッドをオーバーライドしたと言われます。
  • 独自のデータ プロパティとメソッドを持つ Person というクラスがあるとします。これは、speak() と呼ばれるメソッドを備えた親クラスまたは基本クラス Person です。今度は、Person クラスを拡張する Employee というクラスがもう 1 つあります。さて、この Employee クラスには独自のデータ プロパティとメソッドがあり、親クラスと同じメソッド (例:speak()) もあります。
  • この、speaks () メソッドは、基本クラスと派生クラスに存在します。
  • クラスがインスタンス化されるとき、またはオブジェクトが作成されるときに何が起こるかというと、speak() メソッドのどちらが実行されるかということです。つまり、基本クラスについて話すか、派生クラスについて話すかは、オブジェクトによって異なります。クラスの名前が呼び出されます。
  • 言い換えると、Person クラスのオブジェクトが作成されると、person クラスの speech() メソッドが呼び出され、実行されます。ただし、Employee クラスのオブジェクトが作成されると、派生クラスの speech() メソッドが実行され、親クラスの speech() クラスがオーバーライドされます。
  • オーバーライドがどのように行われるかを例で示します
  • 以下の例には、基本クラスと派生クラスの 2 つのクラスがあります。派生クラスは基本クラスを拡張します。これらのクラスが開始され、2 つのオブジェクト $obj1 と $obj2 が作成されます。 $obj1 は BaseClass のオブジェクトであり、$obj2 は派生クラスのオブジェクトです。これらのオブジェクトはさらに、それぞれのクラスで宣言されたメソッドを呼び出します。
  • ここでは、基本クラスと派生クラスに ABC() という同じメソッドがあることがわかります。このプログラムを実行すると、ABC() メソッドが基本クラス メソッド ABC() をオーバーライドしていることがわかります。

メソッドのオーバーライドの例

メソッドのオーバーライドの例を以下に示します。

コード:

class BaseClass {
public function ABC() {
echo "<br /> In the base class";
}
}
class DerivedClass extends BaseClass {
// override the method ABC() of base class
public function ABC() {
echo "<br />In the derived class";
}
}
$obj1 = new BaseClass;
$obj1->ABC();
$obj2 = new DerivedClass;
$obj2->ABC();

出力:

PHP でのオーバーライド

アクセス修飾子によるオーバーライド

アクセス修飾子は 3 つあります。

  1. public: プログラム内のどこからでもアクセスできます。
  2. private: 親クラスからのみアクセスできます。
  3. protected: 基本クラスと派生クラスからアクセスできます。

ご存知のとおり、保護されたメソッドは基本クラスと派生クラスからアクセスできます。サブクラスではパブリックにできますが、プライベートは親クラスでのみアクセスできるため、プライベートにすることはできません。また、クラスメソッドのアクセス指定子が public である場合、派生クラスのオーバーライドメソッドを private および protected として宣言することはできません

アクセス修飾子を使用したメソッドのオーバーライドの例

アクセス修飾子を使用したオーバーライドの例を以下に示します。

コード:

class BaseClass {
private function ABC() {
echo "<br/>In the base class Method : ABC";
}
protected function XYZ() {
echo "<br/>In the base class Method : XYZ";
}
}
class DerivedClass extends BaseClass {
// overriding with public for wider accessibility
public function ABC() {
echo "<br/> In the derived class Method : ABC";
}
// overriding method
// with more accessibility
public function XYZ() {
echo "<br/>In the derived class Method : XYZ";
}
}
//$obj1 = new BaseClass;
//$obj1->ABC();   //throws fatal error
//$obj1->XYZ();          //throws fatal error
$obj2 = new DerivedClass;
$obj2->ABC();
$obj2->XYZ();

出力:

PHP でのオーバーライド

Final キーワードによるオーバーライド

最後のキーワードはクラスとメソッドに使用されます。オーバーライドできるのは変数ではなくメソッドとクラスです。

最終メソッドのオーバーライド

メソッドまたはクラスがfinalとして宣言されている場合、そのメソッドまたはクラスのオーバーライドは実行できず、クラスでの継承も不可能です。

Final キーワードを使用したメソッドのオーバーライドの例

final キーワードを使用したオーバーライドの例を以下に示します。

コード:

class BaseClass {
// Final method – display
// this cannot be overridden in base class
final function display() {
echo "<br /> In the Base class display function";
}
/// method - ABC
function ABC() {
echo "<br /> In the Base cLass ABC function";
}
}
class DerivedClass extends BaseClass {
function ABC() {
echo "<br /> In the Derived class ABC function";
}
}
$obj1 = new DerivedClass;
$obj1->display();
$obj1->ABC();

出力:

PHP でのオーバーライド

Final Class Overriding

A class declared as final cannot be inherited. A Final Class further have final method along with other methods. But since the class itself is declared final there is no use of declaring a final method in a final class.

Example of Class Overriding using Final Keyword

The example of class overriding using final keyword is written below.

Code:

// class declared as final cannot be overridden
final class BaseClass {
// method - ABC
function ABC() {
echo "<br> In the BaseClass Method ABC function";
}
// Final method - display
function display() {
echo "<br> In the BaseClass Method display function";
}
}
// here you cannot extend the base class
// as the base class is declared as final
$obj1 = new BaseClass;
$obj1->display();
$obj1->ABC();

Output:

PHP でのオーバーライド

以上がPHP でのオーバーライドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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