それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PHPとPython

PHPJavaPython見ててわかったこと。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のクラス定義を見てみると、

  1. オブジェクトをforeachに入れると、オブジェクトのメンバが返ってくる
    • Python のオブジェクトは__iter__できる
    • JavaScript のオブジェクトは for ( i in x )出来る
  2. class,extends,implements,interface,abstract,public,private
  3. __construct, __get, __set, __call
    • Python っぽい
      • __getattribute__ , __init__, __setattr__に似ている
  4. __toString
    • Pythonっぽい
      • __str__, __repr__
    • Javaっぽい
      • Object.toString()
  5. 変数に$を使う、echo "{$hoge}"とヒアドキュメント

とくにPHP4 -> 5に追加された機能がPythonっぽい。

  • __get, __set, __call, __toString

PHPは全てのオブジェクトのRootになるオブジェクトがない。予約語やglobal関数がたくさんある。後付けの関数は名前が複雑。オブジェクトのSimpleXMLとImage関数の同居が気持ち悪かった。