$this->varname->method(); が書きにくい。
省略するには、カレントのスコープに変数展開をする必要がある。
<?php //略 extract(get_object_vars($this));
副作用があるとしたら、関数の引数と衝突してしまう。
関数の引数と衝突しないようにするには
<?php //略 extract( array_merge ( get_object_vars($this) , func_get_args());
などとする必要があります。長いなコレ。
しかも、代入が出来ない。困る。
php は this の省略が出来ない。悲しい
java などオブジェクトを作ればthis を省略できるんだけど。
//java public class Test{ public String name; public Test() { name="takuya"; } public String greeting(){ return "「"+name+"」 ";//this省略 } }
php だとエラー
<?php class Test{ public $name; function __construct(){ $this->name = "takuya"; // this 省略できない。 } function greeting(){ echo "「{$name}」"; // this 省略するとエラー } }
しかたないので、 get_object_var して extractする
<?php class Test{ public $name; function __construct(){ $this->name = "takuya"; // this 省略できない。 } function greeting(){ extract( array_merge ( get_object_vars($this) , func_get_args()); echo "「{$name}」"; // $name がカレントスコープに展開される. $this->name = "john" ;// 代入が出来ない } }
毎回書くの面倒くさいけどね。エディタのfunction () テンプレにでも仕込んでおけばなんとかなりそうだ。
call で全ての関数呼び出しを上書きしてもイイんだけど、それも面倒くさいんだよね。call は未知のメソッド呼び出しにしか使えないし。
読み込みのためだけに、extract ってのは、コードがグチャグチャになるので、あんまり進められた方法じゃないですね。