0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPのマジックメソッドについて調べてみた件

Posted at

マジックメソッドとは

PHPには様々な特殊機能をもった関数をもとから持っています。

__で始まる関数名を特殊関数と呼び、あらかじめ取りおいているようです。
なので、特殊な機能を持たない関数を__で始まる名前にしないほうがいいみたいです。

また、全てのマジックメソッドはpublicで宣言しないといけないようです。

コンストラクタ(__construct())などもマジックメソッドです。

マジックメソッドの一覧

メソッド 引数 戻り値 内容
__construct() 任意 なし インスタンス生成時
__destruct() なし なし インスタンスを破棄するとき
__call() 任意 任意 アクセス不能メソッドをオブジェクトのコンテキストで実行したとき
__callStatic() 任意 任意 アクセス不能メソッドを静的コンテキストで実行したとき
__get() プロパティ名 任意 アクセス不能(protected または private)または存在しないプロパティからデータを読み込むとき
__set() プロパティ名と値 なし アクセス不能(protected または private)または存在しないプロパティへデータを書き込むとき
__isset() プロパティ名 true/false isset() あるいは empty() をアクセス不能(protected または private)または存在しないプロパティに対して実行したとき
__unset() プロパティ名 なし unset() をアクセス不能(protected または private)または存在しないプロパティに対して実行したとき
__sleep() なし 配列 インスタンスに対してserialize()を実行したとき
__wakeup() なし なし インスタンスに対してunserialize()を実行したとき
__toString() なし 文字列 インスタンスを文字列に変換しなければならないとき
__invoke() 任意 任意 スクリプトがオブジェクトを関数としてコールしようとした
__set_state() 配列 インスタンス インスタンスに対してvar_export()を実行しようとしたとき
__clone() なし なし cloneキーワードを使ってインスタンスのクローン生成を実行したとき
__debugInfo() なし 配列 インスタンスに対してvar_dump()を実行したとき

使い方(一部)

__construct()

インスタンス生成時に実行される

class hoge {
  private $name = "";
  
  public function __construct(string $name) {
    $this->name = $name;
  }
}

__call()

アクセス不能メソッドをオブジェクトのコンテキストで実行したとき

class hoge {  
  public function __call($name, $argments) {
    return $name($argments); //関数$nameに引数として$argmentsを渡して実行
  }
}

参考にさせていただいた記事など

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?