PHPのメソッド内でプロパティを参照する場合、$thisを省略することができない。
$this->
7文字!しかも記号が二つも増えている!
プロパティを何度も参照する場合、タイプするのが面倒に思うし、後で読む場合もわかりにくい。
<?php
class A
{
private $b, $c, $d;
// ...
function doSomething()
{
$hoge = $this->b->doFuga($this->c, $this->d);
//↑なんか冗長だなあ…
}
function doSomething2()
{
$b = $this->b;
$c = $this->c;
$d = $this->d;
$hoge = $b->doFuga($c, $d);
//↑こう書けばいいんだけど、これはこれで面倒…
}
}
参照のみで、書き込みをしていない場合に限るが 、Iteratorなどを特に実装していないPlainなクラスであれば、こんな一行でサクッと展開できる。
//メソッド内の冒頭にこの一行を追加!
foreach ($this as $n => $v) $$n = $v;
//追記:この書き方の方が無駄な一時変数を作らないので良い
extract(get_object_vars($this));
さっきの例だとこんな感じ。
class A
{
private $b, $c, $d;
// ...
function doSomething()
{
extract(get_object_vars($this));
$hoge = $b->doFuga($c, $d);
//↑ちょっとすっきりした
}
}
PHPの変数はコピーオンライトを採用しているので、単なるコピーであればほとんどメモリは消費しないし、パフォーマンスに悪影響は与えないだろう。
PHP: extract - Manualと同じように、引数なども上書きしてしまうので注意が必要だが、横着したい場合はそれなりに使える。