変数と関数、ドル記号による呼び出しの違いPHP

PHP

変数と関数、ドル記号による呼び出しの違い [PHP]

PHPでは一般的に $this->var;のようにプロパティを読み取ることが多いですが、ライブラリなどで$this->$var;のような、ドルマーク(ドル記号)が付いたままの呼び出しや、中括弧付きの呼び出しを見かけます。

$this->var
$this->$var
$this->{$var}

こういった呼び分けを何と言えば良いかわからないため、調べてもなかなか違いが出てきませんが、後者2つの書き方は共通処理などで使えるため、この違いについて説明していきます。

$this->var;について

まず$this->var;この記述はオブジェクトのvarプロパティを読み取っているだけです。PHPにおけるプロパティとはクラスのメンバ変数のことを示しています。

下記の例で言えば$this->id = $id_param;はメンバ変数に第一引数の$id_paramを代入しているということです。

public $id;
public $name;
public function __construct($id_param, $name_param){
    $this->id = $id_param;
    $this->name = $name_param;
}

PHP プロパティ

$this->$var;について

PHPは多少癖があり、文字列を使った関数呼び出しを行うことができます。

下記の例で見ると、$thisオブジェクトの変数プロパティ名、ここではexampleを読み取るので、$this->example;ということになります。

$id = 'example';
$this->$id;
//$this->example;呼び出しと同義

マイクロサービスやRESTful API(REST API)のようなAPI呼出を行うような設計の時など、共通処理として記載できます。

class Test{
    public function get($api_name, $parameter ) {
        $result = array();
        if (method_exists($this, $api_name)) {
            $this->$api_name($result, $parameter );
        }
        return $result;
    }
}

$test = new Test();
var_dump($test->get('get_example',array()));
//get_exampleという呼び出しメソッドがなければ
//array(0) {}

$this->{$var};について

最後にもう一つ可変変数と呼ばれる$this->{$var};のような中括弧で覆われた記載があります。

これは上記の$this->example;と基本的には同じですが、曖昧さを抑えた記述で、順序を制御するために括弧を追加するのと似ており、場合によっては便利です。

$id = 'example';
$this->{$id};
//式の明確さや順番をコントロールすることができます
$this->{$id['key']};
$this->{$id}['key'];

PHP 可変変数

  • この記事を書いた人

朝倉卍丸

シングルモルトスコッチなどのお土産を持ってきた人を助けるのが好きです。サービスの分割が重要ですが、まあ昔ながらの方法でやりたいこともありますよね。

よく読まれている記事

条件の0=0は全てが正であるを意味するSQL 1

SQLの条件に0=0のような記述を見かけます。 変わった書き方の条件ですが、これは「全てが正である」事を意味しており、結合条件の場合はCROSS JOINと同じです。 下記の例で言えば、結合するsub ...

DISTINCTを使わないで重複排除を考えるSQL 2

SQLのDISTINCTはEXISTSとかGROUP BYでなんとかする事もできます。 DISTINCTは暗黙的なソートがされますが、何のDBを使うにせよ過去のバージョンならともかく、最近のバージョン ...

RFC 5322に準拠させた正規表現言語別 3

RFC5322で定義されている正規表現を、各言語の正規表現に変化させた形になります。 完全な電子メール正規表現は存在しないので、結局のところ何かの公式基準に従っていたとしても、自分が携わるサービスのル ...

-PHP