PHP でのメソッドのオーバーロード

Subodh Poudel 2023年1月30日
  1. PHP でのメソッドのオーバーロード
  2. PHP で __call() Magic メソッドを使用してメソッドのオーバーロードを実装する
  3. PHP で __callStatic() Magic メソッドを使用してメソッドのオーバーロードを実装する
PHP でのメソッドのオーバーロード

この記事では、PHP でのメソッドのオーバーロードの概念と例を紹介します。

PHP でのメソッドのオーバーロード

メソッドのオーバーロードは、異なる数のパラメーターまたはデータタイプを受け入れるクラス内に同じ名前の複数のメソッドが存在する OOP の概念です。たとえば、メソッド add() は、2 回定義することでオーバーロードできます。最初のものは 2つのパラメーターを取り、2 番目のものは 3つのパラメーターを取ります。

一方のメソッドで整数引数を提供し、もう一方のメソッドで浮動小数点引数を提供することで、関数をオーバーロードすることもできます。このタイプのオーバーロードは、Java や C++ などの言語で一般的です。

ただし、メソッドのオーバーロードの概念は PHP ではまったく異なります。メソッドのオーバーロードは、魔法のメソッドを使用してメソッドを動的に作成するプロセスです。

クラスのスコープ内に存在しないメソッドを作成できます。クラスメソッドと静的メソッドの両方で機能します。

魔法のメソッド __call()__callStatic() は、動的メソッドをオーバーロードするために使用されます。名前から明らかなように、クラスメソッドには __call() メソッドが使用され、静的メソッドには callStatic() メソッドが使用されます。

これらのメソッドの構文を以下に示します。

__call($name, $arguments){
//function  body
}

ここで、$name は動的メソッドの名前であり、$arguments は動的メソッドの引数を保持する配列です。メソッド内では、$arguments 配列のインデックスを使用して引数にアクセスできます。

PHP で __call() Magic メソッドを使用してメソッドのオーバーロードを実装する

__call() メソッドを使用して、PHP で動的にメソッドを作成できます。オブジェクトコンテキストでまだ作成されていないメソッドを呼び出すと、メソッドが実行されます。

このプロセスは、PHP ではメソッドオーバーロードと呼ばれます。

たとえば、クラス University とその中にメソッド __call() を作成します。このメソッドでは、パラメーターに $name$arguments という名前を付けます。

メソッド内で、$name 変数と $arguments 配列の項目を出力します。クラスの外で、University クラスのオブジェクト $student を作成します。

次に、$student オブジェクトを使用して student_info() メソッドを呼び出します。メソッドに引数 001Biswash を渡します。

サンプルコード:

<?php
class University{
    public function __call($name, $arguments){
        echo "inside the method: ".$name."<br>";
        echo "id:".$arguments[0]."<br>";
        echo "name:".$arguments[1]."<br>";
        }
}

$student = new University;
$student->student_info(001,'Biswash');
?>

上記の例の流れを理解しましょう。

パラメータを使用して student_info() メソッドを呼び出すと、プログラムは University クラスでメソッドを見つけられません。ただし、メソッド __call() がクラスに存在するため、この関数が実行されます。

メソッドの $name パラメーターは student_info() メソッドを保持し、$arguments パラメーターは引数 001BiswashArray ( [0] => 1 [1] => Biswash )。パラメータは、__call() メソッド内に出力されます。

出力:

inside the method: student_info
id:1
name:Biswash

このようにして、__call() マジックメソッドを使用して、PHP のオブジェクトコンテキストでメソッドのオーバーロードを実現できます。

PHP で __callStatic() Magic メソッドを使用してメソッドのオーバーロードを実装する

PHP の静的コンテキストでメソッドオーバーロード機能を使用することもできます。__callStatic() マジックメソッドを使用する必要があります。

メソッドの関数定義は、__call メソッドの関数定義と似ています。ただし、静的コンテキストで使用するため、メソッドは静的である必要があります。

これは静的コンテキストであるため、クラスのインスタンスを作成する必要はありません。クラスの::演算子を使用して、動的に作成されるメソッドを直接呼び出すことができます。

たとえば、__call() メソッドの場合と同様に、クラス University 内にメソッド __callStatic() を作成します。メソッドを定義するときに、static キーワードを記述することを忘れないでください。

上記の方法のように、メソッドのパラメーターと本体を入力します。クラスの外で、クラスの::演算子を University::professor_info() として使用して、メソッド professor_info を呼び出します。

メソッドで選択した引数を指定します。

サンプルコード:

<?php
class University{
    public static function __callStatic($name, $arguments){
        echo "inside the method: ".$name."<br>";
        echo "id:".$arguments[0]."<br>";
        echo "name:".$arguments[1]."<br>";
    }
}

University::professor_info(0010,'Professor Jack ');
?>

出力:

inside the method: professor_info
id:8
name:Professor Jack

このようにして、PHP の __callStatic() マジックメソッドを使用して静的メソッドをオーバーロードできます。

著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn