とぎぷろべい

包丁研ぎとプログラミングと米国株投資についてのなんやかんや

マジックメソッドについて(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1におけるマジックメソッドについて

<?php

class Ca {               //クラス作成
  protected string $psa; //プロパティ作成
  protected int $pia;    //プロパティ作成

 public function __construct($a, $b) {  //コンストラクター(マジックメソッド)
    $this->psa = $a;     //$aを$psaに代入
    $this->pia = $b;     //$bを$piaに代入
  }

 public function __toString() {  //マジックメソッド
    return $this->psa. ':'. number_format($this->pia). "円\n";  //刺身盛り合わせ:1,298円
  }
}

$Ca = new Ca('刺身盛り合わせ'1298);  //Caクラスのインスタンス作成
echo $Ca;  //このタイミングで__tostringが実行される

マジックメソッドとは、コンストラクターのような通常の呼び出し方とは異なる経路で呼び出される特殊なメソッドのことです。

 

すべてのマジックメソッドは、ダブルアンダースコアからはじまる名前を持っています。

またマジックメソッドとして用意されている名称は、マジックメソッドを定義する以外の目的で変数名や関数名に使用することはできません。

 

なおマジックメソッドのアクセス修飾子はすべてpublicを使うことがルールとなっています。

 

 

以下、マジックメソッドの一覧です。

 

__construct()

当該クラスのインスタンスが作成されたタイミングで実行されます。

 

__destruct()

当該クラスのインスタンスが削除されたタイミングで実行されます。

 

__call()

インスタンスに存在しない関数が呼び出されたタイミングで実行されます。

 

__callStatic()

インスタンスに存在しない静的メソッドが呼び出されたタイミングで実行されます。

 

__get()

インスタンスに存在しないプロパティが呼び出されたタイミングで実行されます。

 

__set()

インスタンスに存在しないプロパティに何らかの値が代入されたタイミングで実行されます。

 

__isset()

インスタンスの「アクセスできないプロパティ」に対してisset関数またはempty関数を実行したタイミングで実行されます。

 

__unset()

インスタンスの「アクセスできないプロパティ」に対してunset関数を実行したタイミングで実行されます。

 

__sleep()

インスタンスシリアライズしたタイミングで実行されます。

 

__wakeup()

インスタンスをアンシリアライズしたタイミングで実行されます。

 

__serialize()

当該クラスが__serialize()を持っていれば、それがシリアル化される前のタイミングで実行されます。

 

__unserialize()

当該クラスが__unserialize()を持っていれば、__serialize()が処理を終えた後のタイミングで実行されます。

 

__toString()

インスタンスがecho関数などで出力されるタイミングで実行されます。

 

__invoke()

インスタンスが関数として呼び出されたタイミングで実行されます。

 

__set_state()

var_export関数がクラスをエクスポートした後のタイミングで実行されます。

 

__clone()

インスタンスをクローンしたタイミングで実行されます。

 

__debugInfo()

var_dump関数がオブジェクトをダンプするタイミングで実行されます。

 

 

以下、マジックメソッドの説明で出てきた一部用語の説明です。


〇静的メソッド(staticメソッド)

静的メソッドとは、staticが宣言されているメソッドのことです。

静的メソッドには当該クラスのインスタンスが存在しなくてもアクセスすることができます。

 

また、静的メソッドには擬似変数($this)を使うことはできません。

 


〇静的プロパティ(staticプロパティ)

静的プロパティとは、staticが宣言されているプロパティのことです。

静的プロパティには当該クラスのインスタンスが存在しなくてもアクセスすることができます。

 

また、静的プロパティにはスコープ定義演算子(::)を使ってアクセスすることができますが、アロー演算子(->)を使ってアクセスすることはできません。

 


シリアライズ

シリアライズはシリアル化や直列化とも呼ばれます。

シリアライズとは、複数の要素を一列に並べる操作や処理のことです。

 

言い方を変えると、シリアライズとは通常の値から配列を作り出す処理のことだとも言えます。

 


〇アンシリアライズ

アンシリアライズとは、シリアライズされている値をそうでない値に戻す処理のことです。

言い方を変えると、アンシリアライズとは配列を通常の値に変換する処理のことだとも言えます。

 


〇クローン

クローンはオブジェクトの複製を作成する方法の総称です。

 


〇ダンプ

ダンプとは、○○の内容を「手を加えずにそのままの形で」ファイルに出力することです。

例えばメモリのダンプなら、メモリの内容をファイルに出力するという意味になる。

 

 

以上です。