2021.12.28
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
こんにちは!福神漬けです。
今日はなんとなく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に来たら使うかも?
でもそれなら別にオブジェクト使わなさそうなんですよね…
終わりに
結構自由度高いなーっていうのが感想です。
こういう言語のシステムに近いところを知るとなんか賢くなった気がしますね!
ちなみに弊社は今日が仕事納めです。
お疲れ様でした!良いお年を!