開発者たちは魔法使いに憧れているんでしょうか
PHP Advent Calendar 9日目です。
昨日はPHPerのみんなに知ってもらいたい、PHPの重要なことでした。
今日はまじかるしばりなPHPです。
マジックメソッドとマジカル定数で色々と遊んで見ようと思っていたところになんとタイミング悪く、
名刺サイズのLinuxマシン「Raspberry Pi」が届いてしまい、残念なことに急遽それどころでは無くなってしまいました。
どうしても我慢できなくて、Raspberry Piで遊びたくて、
無理やりPHPにこじつけていじれないか検討した結果、
RaspberryPiでPHPを動かしてみるというのをしようと思いました。
が、、、、
pi@raspberrypi ~ $ sudo apt-get install apache2 php5 pi@raspberrypi ~ $ sudo /etc/init.d/apache2 restart pi@raspberrypi ~ $ sudo echo "<?php phpinfo();" > /var/www/index.php
何も面白いことも、つまづく事も一切無く、普通にPHPが動いてしまいました。
これじゃあかん
というわけで、
やっぱり元に戻って、
マジックメソッドとマジカル定数について
これらの説明はここでは省略します。
マジカル定数についての説明はこちら
マジックメソッドについての説明はこちら
今回このマジカル定数とマジックメソッドを使って何かしてみました。
本来は1行で済んでしまうようなくだらない事でも、マジカル定数とマジックメソッドを使えば、
こんなに沢山の文字をタイプすることができます。
そして、難読化も出来ます。
有難いことだらけですね。
<?php class Magic { public function __construct() { echo $this->__CLASS__; } public function __get($name) { isset($this->$name); } public function __isset($name) { echo strtoupper(substr(__FUNCTION__, (__LINE__ / __LINE__) << (__LINE__ / __LINE__), __LINE__ / __LINE__)); unset($this->$name); $this->$name(); } public function __call($name, $args) { echo substr(__FUNCTION__, (__LINE__ / __LINE__) << ((__LINE__ / __LINE__) << (__LINE__ / __LINE__)), __LINE__ / __LINE__); clone $this; } public function __clone() { echo substr(__FUNCTION__, (__LINE__ / __LINE__) << ((__LINE__ / __LINE__) << (__LINE__ / __LINE__)), __LINE__ / __LINE__); $this(); } public function __invoke() { echo substr(__FUNCTION__, (__LINE__ / __LINE__) << ((__LINE__ / __LINE__) << (__LINE__ / __LINE__)), __LINE__ / __LINE__); $this->__CLASS__ = __LINE__; } public function __set($name, $value) { echo substr(__FUNCTION__, (__LINE__ / __LINE__) | ((__LINE__ / __LINE__) << (__LINE__ / __LINE__)), __LINE__ / __LINE__); unserialize(serialize($this)); } public function __sleep() { unset($this->__CLASS__); echo substr(__FUNCTION__, (__LINE__ / __LINE__) - ((__LINE__ / __LINE__) << (__LINE__ / __LINE__)), __LINE__ / __LINE__); echo $this; return array(); } public function __toString() { return chr(ord(substr(__CLASS__, (__LINE__ / __LINE__) << (__LINE__ / __LINE__), __LINE__ / __LINE__)) + __LINE__ / __LINE__); } public function __wakeup() { echo substr(__FUNCTION__, (__LINE__ / __LINE__) - ((__LINE__ / __LINE__) << (__LINE__ / __LINE__)), __LINE__ / __LINE__); } public function __unset($name) { echo chr(pow((__LINE__ / __LINE__) << (__LINE__ / __LINE__), (__LINE__ / __LINE__) << ((__LINE__ / __LINE__) << (__LINE__ / __LINE__)) | (__LINE__ / __LINE__))); } } new Magic(); echo "\n";
これだけ無駄にタイプしておいて、実行した時のガッカリ感を是非お楽しみ下さい。
サザエさんを見ながら書くつもりだったけれど、ちょっと早めに書きました。