PHP には、クラス、オブジェクト、カプセル化、ポリモーフィズムなどのさまざまなオブジェクト指向プログラミングの概念があります。オーバーロードも、PHP における OOP の概念です。関数オーバーロードまたはメソッド オーバーロードは、入力パラメーターの型が互いに異なる、同じ名前の複数のメソッドを作成できる機能です。これは、単に 1 つの関数が異なるタスクを実行する能力として定義されます。
1 行でのオーバーロードの定義: 「名前は同じですが実装が異なります。」
広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
ご存知のとおり、メソッドのオーバーロードは関数に対して実行されます。したがって、各関数に渡される引数に基づいて、関数をさまざまな実装でオーバーロードできます。たとえば、半径が与えられた場合、円の面積 (pi *r *r) を求めるには、辺の長さが与えられた場合、正方形の面積 (辺 * 辺) を求める場合、三角形の面積は (底辺) となります。 * 高さ) / 2 に基本の長さが与えられ、高さが与えられるなどです。
概念のオーバーロードには Magic メソッドが必要です。
Magic Methods は __(二重アンダースコア) で始まり、PHP によって自動的に呼び出されます。また、これらは常にクラスの内部で定義され、クラスの外部では定義されません。さまざまなマジック メソッドは、__get()、__set、__construct()、__destruct()、__call()、__callStatic()、__isset()、__unset()、
です。オーバーロードを実行すると、プロパティとメソッドが動的に作成され、これらを合わせてエンティティと呼ばれます。
エンティティは
とも呼ばれます__call() メソッドを使用してマジック メソッドがどのように機能するかを見てみましょう
<?php class Test{ private $a = array('one','two','three'); public function__call($method, $args) { print "Method $method called:\n"; echo "<pre class="brush:php;toolbar:false">"; print_r($args); return $this->a; } } $obj = new Test(); $a = obj->anyMethod(1, 2, 3); var_dump($a); ?>
上記の例では、プライベート プロパティと __call メソッドを持つ Test というクラスを宣言しました。 2 つの引数が __call メソッドに渡されます。 __call メソッド内では、ステートメント print() を使用し、var_dump を引数として、戻り値 x が返されます。
次に、obj という名前のクラスのオブジェクトが作成され、このオブジェクトを使用して、未定義のメソッドが呼び出されます。このメソッドは存在しないため、代わりに __call() が呼び出されます。
PHP には 2 つのタイプのオーバーロードがあります。それぞれのタイプについて詳しく学習してみましょう。
プロパティのオーバーロードにより、オブジェクトの設定時に動的プロパティが作成されます。このプロパティはクラス インスタンスに関連付けられており、このプロパティがクラスのエクステント内で宣言されていない場合、オーバーロードされたプロパティとみなされます。このために、追加のコードを記述する必要はありません。以下の魔法の方法は、同じことについて詳しく教えてくれます。
以下は、オーバーロードされたプロパティを使用して実行される操作です
Setter および Getter のオーバーロードされたプロパティ (__set() および __get() を使用)
オーバーロードされたプロパティ設定の評価 (__isset() を使用)
そのようなプロパティ設定を元に戻す (__unset() を使用)
これらの各メソッドの使用法を理解しましょう
__set() =>オーバーロードされたプロパティを初期化するために使用されます。
__get() =>すでに初期化されているプロパティを取得するために使用されます
__isset() =>プロパティが設定されているかどうかを確認するために使用されます
__unset() =>プロパティの設定を解除するために使用されます。
__call() =>オーバーロードされたメソッドを初期化するために使用されます
__callStatic() => 静的メソッドを初期化するために使用されます
次の例では、上記のすべてのメソッドが一緒に使用されます。
コード:
class PropertyOverloading { public $details = array(); //declaring private property private $j=20; // setter operation public function __set($name, $value) { echo "<br />". " In the Setting operation. Set '$name = $value'"; $this->details[$name] = $value; } // getter operation public function __get($name) { echo "<br />". " In the Getting Operation. Get '$name = '"; return $this->details[$name] . ' <br /> '; } // isset operation public function __isset($name) { echo "<br />". " In the isset Operation. isset '$name' ?"; return isset($this->details[$name]); } // unset operation public function __unset($name) { echo "<br />". " In the unset Operation. unset '$name' "; unset($this->details[$name]); } // returning private property value public function getPrivateProperty() { return "<br />". " j = ".$this->j; } } // creating object of class PropertyOverloading // setter and getter methods are called $obj = new PropertyOverloading(); $obj->x = 10; echo $obj->x; //call isset method var_dump(isset($obj->x)); //call unset method unset($obj->x); //check whether object x is unset or not var_dump(isset($obj->x)); //getting method to access the private property echo "<br />". $obj-> getPrivateProperty(); //calling directly the private property // throws error echo "<br />accessing the private property, throws error"; echo "<br />".$obj->j;
コード:
出力
プロパティのオーバーロードと同様、メソッドのオーバーロードは、クラスの範囲外で宣言される動的メソッドを作成します。そして、これは __call() および __callStatic() マジック メソッドで可能です。これらは、それぞれオブジェクト参照と静的参照に基づいて使用されます。
__call() ->オブジェクト参照でオーバーロードされたメソッドを呼び出すために使用されます
__callStatic() ->静的参照でオーバーロードされたメソッドを呼び出すために使用されます
次の例は、さらに詳しく学ぶのに役立ちます。
<?php class MethodOverloading { public function __call($name,$param){ echo "--With object reference <br/>"; } public static function __callStatic($name,$param){ echo "-----With static reference <br/>"; } } // creating object of class MethodOverloading $obj = new MethodOverloading; echo "Method Overloading <br/>"; // using the object reference $obj->DemoTest(); // using the static reference MethodOverloading::DemoTest(); ?>
コード:
出力:
1) パブリック アクセス指定子はオーバーロード メソッドに使用されます。
2) オーバーロード プロセスが使用され、クラスのオブジェクトの作成時に、クラスの範囲内で定義されていないプロパティまたはメソッドにアクセスできます。
3) マジック メソッドは、プロパティまたはメソッドのオーバーロードに使用されます。メソッドのオーバーロードに使用される 2 つのマジック メソッドのうち、最もよく使用されるメソッドはオブジェクト コンテキストの __call() メソッドで、あまり使用されないのは静的コンテキストで使用される __callStatic() メソッドです。
これは、PHP でのオーバーロードに関するガイドです。ここでは、PHP におけるオーバーロードの種類と概念について例を挙げて説明します。詳細については、次の記事も参照してください –
以上がPHP でのオーバーロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。