PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのオーバーロード


はじめに

PHPでは、C ++やJavaなどの他のオブジェクト指向言語と比較して、オーバーロードの解釈が異なります。この用語は、同じ名前のメソッドを持つクラスを複数回持つが、引数や戻り値のタイプが異なるクラスを持つ能力を意味します。一方、PHPでは、プロパティとメソッドを動的に作成する機能は、オーバーロードと呼ばれます。 PHPの魔法のメソッド (二重下線で始まるメソッド名)は、動的プロパティとメソッドを設定するために使用されます。

プロパティのオーバーロードには、次のマジックメソッドが使用されます-

構文

public __set ( string $name , mixed $value ) : void
public __get ( string $name ) : mixed
public __isset ( string $name ) : bool
public __unset ( string $name ) : void

__set()は、保護されているか、プライベートであるか、存在しないアクセスできないプロパティにデータを書き込むために実行されます。

__get()は、アクセスできないプロパティからデータを読み取ります。

__isset()は、アクセスできないプロパティに対してisset()またはempty()を呼び出します。

__unset()は、アクセスできないプロパティでunset()が呼び出されたときに呼び出されます。

次のコードでは、 mypropという名前の動的プロパティ 設定、取得、未設定

<?php
class myclass{
   public function __set($name, $value){
      echo "setting $name property to $value \n";
      $this->$name = $value;
   }
   public function __get($name){
      echo "value of $name property is ";
      return $this->$name;
   }
   public function __isset($name){
      return isset($this->$name);
   }
   public function __unset($name){
      unset($this->$name);
   }
}
$obj = new myclass();
$obj->myprop="test";
echo $obj->myprop . "\n";
var_dump (isset($obj->myprop));
unset($obj->myprop);
var_dump (isset($obj->myprop));
?>

出力

出力は以下のとおりです-

setting myprop property to test
test
bool(true)
bool(false)

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

メソッドを動的に設定するために使用される2つの魔法のメソッドは、__ call()と__callStatic()

です。
public __call ( string $name , array $arguments ) : mixed
public static __callStatic ( string $name , array $arguments ) : mixed

__call()は、オブジェクトコンテキストでアクセスできないメソッドを呼び出すとトリガーされます。

__callStatic()は、静的コンテキストでアクセスできないメソッドを呼び出すとトリガーされます。

次の例は、PHPでのメソッドのオーバーロードを示しています

<?php
class myclass{
   public function __call($name, $args){
      // Note: value of $name is case sensitive.
      echo "Calling object method $name with " . implode(" ", $args). "\n";
   }
   public static function __callStatic($name, $args){
      echo "Calling static method $name with " . implode(" ", $args). "\n";
   }
}
$obj = new myclass();
$obj->mymethod("Hello World!");
myclass::mymethod("Hello World!");
?>

出力

上記のコードは次の結果を生成します:

Calling object method mymethod with Hello World!
Calling static method mymethod with Hello World!

  1. PHPのgetterおよびsetterメソッドとは何ですか?

    この記事では、PHPでゲッターとセッターの戦略を作成するための最良の方法を学びます。エンドユーザーによる変数への直接アクセスを制限する必要がある場合は、ゲッターとセッターの戦略が利用されます。ゲッターとセッターは、変数の値を定義または取得するために使用されるメソッドであり、通常はプライベート変数です。 名前が示すように、getterメソッドは、オブジェクトの値を取得または回復する手法です。また、セッターメソッドはオブジェクトの値を設定する手法です。 例 例を通して、getterメソッドとsetterメソッドの使用法を理解しましょう。 <?php    class

  2. PHPでのメソッドのオーバーロードとは何ですか?

    メソッドオーバーロードは、オブジェクト指向プログラミングの概念であり、複合アプリケーションを簡単に構築するのに役立ちます。関数のオーバーロードまたはメソッドのオーバーロードは、引数として受け入れる入力パラメーターのタイプが互いに異なる、類似した名前の複数のメソッドを作成できるようにする機能です。 上記の概念は他のプログラミング言語には問題なく、静的ポリモーフィック、つまりメソッドのオーバーロードと呼ばれます。 例 例を通して理解しましょう。 <?php    class machine {       function doTask(