肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

「Dynamic Static Calls」@PHP 5.3


Introduction of PHP 5.3 という記事があり、PDFでスライドが作られていましたので、流し読みしてみました。

まぁまぁ、知っていたことも多数、知らなかったことも多数。
その中でちょっと笑ったのが、Dynamic Static Callというもの。スライドでいう14枚目です。

おいおい動的なんだか静的なんだかハッキリしろよ、と思うこの新機能ですが、まぁ動的な静的メソッド呼び出しのことです。

で、動的にメソッドを呼び出すことができるのは知っていたのですが、たしかに、静的コールを動的にしたことがなかったので気づきませんでしたが、できないんですね。

ちょっと検証コードとか。PHP5.2.5です。

動的なメソッドコール

<?php
class A
{
    function B()
    {
        echo 1;
    }
}

$b = "B";
$inst = new A;
$inst->$b();

当然こちらの実行結果は

1

です。

動的な静的メソッドコール

<?php
class A
{
    static function B()
    {
        echo 1;
    }
}

$b = "B";
$inst = "A";
$inst::$b();

パースエラーです、と怒られます。

PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in Command line code on line 12

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in Command line code on line 12

初めてみたぞこんなエラー。なんて読むのかわからん。と、思ってググったら、msakamoto-sfさんの記事がヒット。ヘブライ語なのか・・・しかし依然読み方はわからずw


要するに、PHP5.3ではこれができるようになる、まあそういうことです。

まとめ

  • Dynamic Static Call(動的静的呼び出し)という名前はすごい
  • 動的に静的メソッド呼べちゃうPHP
    • しかし、動的にメソッドをコールできるのに静的メソッドは動的にコールできなかったこれまでの仕様もなかなかPHPらしい。


この内容全部ちゃんとまとめたいなあ。


(修正) 2つ目の静的呼び出しのコードがちょっと変だったので修正 3/19