PHPとJavaとPython見ててわかったこと。PHPはかなり良いところ取り言語。
PHPのクラス
PHP5で作るクラスは、Javaっぽいが、Pythonっぽく、可変変数がPerlっぽい、ループに入れるとJavaScriptっぽい
<?php abstract class SampleClass /*extends Parent implements Cousin*/{ protected static $var; public $name; public $game; public $time; public $same; public function __construct(){ //parent::__construct(); } public function __get($name){ return $this->$name; } public function __call( $name, $args ){ return $this->$name( $args ); } public function __set( $name, $var ){ return $this->$name = $var; } abstract public function Moe(); } class TunTun extends SampleClass { public function Moe(){ return $this->{"もぅ"}; } } $tun = new TunTun(); foreach( $tun as $key => $val ){ echo "{$key}=${$val}\n";//name=game=time=same= }
PHPのクラス定義を見てみると、
- オブジェクトをforeachに入れると、オブジェクトのメンバが返ってくる
- Python のオブジェクトは__iter__できる
- JavaScript のオブジェクトは for ( i in x )出来る
- class,extends,implements,interface,abstract,public,private
- Javaっぽい
- __construct, __get, __set, __call
- Python っぽい
- __getattribute__ , __init__, __setattr__に似ている
- Python っぽい
- __toString
- 変数に$を使う、echo "{$hoge}"とヒアドキュメント
- Perlっぽい
とくにPHP4 -> 5に追加された機能がPythonっぽい。
- __get, __set, __call, __toString
PHPは全てのオブジェクトのRootになるオブジェクトがない。予約語やglobal関数がたくさんある。後付けの関数は名前が複雑。オブジェクトのSimpleXMLとImage関数の同居が気持ち悪かった。