PHP でのオーバーロード

王林
リリース: 2024-08-29 12:56:56
オリジナル
932 人が閲覧しました

PHP には、クラス、オブジェクト、カプセル化、ポリモーフィズムなどのさまざまなオブジェクト指向プログラミングの概念があります。オーバーロードも、PHP における OOP の概念です。関数オーバーロードまたはメソッド オーバーロードは、入力パラメーターの型が互いに異なる、同じ名前の複数のメソッドを作成できる機能です。これは、単に 1 つの関数が異なるタスクを実行する能力として定義されます。

1 行でのオーバーロードの定義: 「名前は同じですが実装が異なります。」

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

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

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

PHP でオーバーロードはどのように機能しますか?

ご存知のとおり、メソッドのオーバーロードは関数に対して実行されます。したがって、各関数に渡される引数に基づいて、関数をさまざまな実装でオーバーロードできます。たとえば、半径が与えられた場合、円の面積 (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);
?>
ログイン後にコピー

PHP でのオーバーロード

上記の例では、プライベート プロパティと __call メソッドを持つ Test というクラスを宣言しました。 2 つの引数が __call メソッドに渡されます。 __call メソッド内では、ステートメント print() を使用し、var_dump を引数として、戻り値 x が返されます。

次に、obj という名前のクラスのオブジェクトが作成され、このオブジェクトを使用して、未定義のメソッドが呼び出されます。このメソッドは存在しないため、代わりに __call() が呼び出されます。

PHP におけるオーバーロードの種類

PHP には 2 つのタイプのオーバーロードがあります。それぞれのタイプについて詳しく学習してみましょう。

  • プロパティのオーバーロード
  • メソッドのオーバーロード

1) プロパティのオーバーロード

プロパティのオーバーロードにより、オブジェクトの設定時に動的プロパティが作成されます。このプロパティはクラス インスタンスに関連付けられており、このプロパティがクラスのエクステント内で宣言されていない場合、オーバーロードされたプロパティとみなされます。このために、追加のコードを記述する必要はありません。以下の魔法の方法は、同じことについて詳しく教えてくれます。

以下は、オーバーロードされたプロパティを使用して実行される操作です

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;
ログイン後にコピー

コード:

PHP でのオーバーロード

出力

PHP でのオーバーロード

2) メソッドのオーバーロード

プロパティのオーバーロードと同様、メソッドのオーバーロードは、クラスの範囲外で宣言される動的メソッドを作成します。そして、これは __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();
?>
ログイン後にコピー

コード:

PHP でのオーバーロード

出力:

PHP でのオーバーロード

ルール

1) パブリック アクセス指定子はオーバーロード メソッドに使用されます。

2) オーバーロード プロセスが使用され、クラスのオブジェクトの作成時に、クラスの範囲内で定義されていないプロパティまたはメソッドにアクセスできます。

3) マジック メソッドは、プロパティまたはメソッドのオーバーロードに使用されます。メソッドのオーバーロードに使用される 2 つのマジック メソッドのうち、最もよく使用されるメソッドはオブジェクト コンテキストの __call() メソッドで、あまり使用されないのは静的コンテキストで使用される __callStatic() メソッドです。

おすすめ記事

これは、PHP でのオーバーロードに関するガイドです。ここでは、PHP におけるオーバーロードの種類と概念について例を挙げて説明します。詳細については、次の記事も参照してください –

  1. PHP 配列とは何ですか?
  2. C# でのオーバーロード
  3. C++ でのオーバーロード
  4. C# でのオーバーロードとオーバーライド

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

関連ラベル:
php
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート