公開日:2021.12.28

PHPのマジックメソッド

テクログ

こんにちは!福神漬けです。

今日はなんとなくphpのマジックメソッドの話です!

マジックメソッドとは

マジックメソッドとは、オブジェクトに対する動作を上書きするためのメソッドです。
 ex.インスタンスを作ったとき、プロパティにアクセスしたとき、echoしたとき
以下マニュアルです
https://www.php.net/manual/ja/language.oop5.magic.php

phpでは特徴として全て「__」とアンダースコア2つから始まっています。
つまり紛らわしいので普通の関数ではこれを付けないようにしましょう!ということです。

注意点

マニュアル読むと警告がいっぱいあるのでなんとなく察せると思いますが、用がなければ触らない方がいいです。
特に以下二つの理由からです。

・元々の動作を深く理解していないと簡単にバグる

・phpバージョンで動作や制約に結構差がある

気になるマジックメソッド

そんな怖いマジックメソッドですが、いくつか身近で面白いものをピックアップします!
こういうこともできるんだ、って可能性を感じてください。
__constructは知名度抜群なので割愛してます。

__set__get

プロパティを代入したり取得したりするときの動きを変えられます。
https://www.php.net/manual/ja/language.oop5.overloading.php#language.oop5.overloading.members

__toString

オブジェクトをechoなど文字列に変換しようとしたときに動きます。
https://www.php.net/manual/ja/language.oop5.magic.php#language.oop5.magic.tostring

これは割と使われているイメージがありますね。
FuelphpのViewクラスもこれを拡張していて、echoした時いい感じにHTMLを表示してくれます。

ちなみになんでこれキャメルなんでしょうね。

__invoke

オブジェクトを関数として呼ぼうとしたときに動きます。
https://www.php.net/manual/ja/language.oop5.magic.php#language.oop5.magic.invoke

個人的にphpではあまり馴染みがないんですが、関数型で書く流れがphpに来たら使うかも?
でもそれなら別にオブジェクト使わなさそうなんですよね…

終わりに

結構自由度高いなーっていうのが感想です。
こういう言語のシステムに近いところを知るとなんか賢くなった気がしますね!

ちなみに弊社は今日が仕事納めです。
お疲れ様でした!良いお年を!

この記事を書いた人

福神漬け

入社年2017年

出身地チーバくんの目のあたり

業務内容開発やりつつちょっと管理っぽい仕事

特技または趣味ゲームとゲームをしながらゲームをできること

福神漬けの記事一覧へ

テクログに関する記事一覧