LoginSignup
27
23

More than 5 years have passed since last update.

$this->を書くのが面倒なのでメソッド内で変数展開する

Last updated at Posted at 2014-05-17

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と同じように、引数なども上書きしてしまうので注意が必要だが、横着したい場合はそれなりに使える。

27
23
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
23