それマグで!

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

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

クラスの $thisを省略したい

$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 ってのは、コードがグチャグチャになるので、あんまり進められた方法じゃないですね。