php7から追加された無名クラスを使ってみる



PHP7がリリースされ、
速度、メモリ低減の等のパフォーマンス向上の他 幾つか新機能も追加されました。

PHP5.3からは無名関数が使えるようになりましたが、
PHP7.0からは新たに無名クラス ( Anonymous Class ) が加わりました。


今回はPHP7の無名クラスの検証の為にMacにPHP7をインストールしました。
* (参考にしたサイト) Shameer C : Installing PHP 7 on Mac using Homebrew 

# home-brewを使ってインストールします
brew update
brew install homebrew/php/php70
export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"


無名クラスを使うことにより、
今までの5.*系よりもクラスが取り扱いが簡単になります。

クラスの呼び出しも、今までは変数内でクラスをインスタンス化していたのが
直接呼び出せるようになりました。

/* クラスの呼び出しサンプル */
class Repo
{
  public function test()
  {
    return "hello";
  }
}

/* PHP 5.6 */
// クラスをインスタンス化
$repo = new Repo();

// Repoクラスのtest関数の呼び出し
echo $repo->test();


/* PHP 7.0.2で検証 */
echo (new Repo)->test();

呼び出す時も変数内でインスタンス化する必要が無いので
短く記述出来るようになりましたね!
(*PHPのCエクステンションのredisで、接続等をチェーンメソッドで呼びだそうと試しましたが、2.2.8では出来ませんでした)


また、クラスを作成する際も 関数内でクラスを作成することが出来ます。

class Helpers
{  
  public function func()
  {
    // 無名クラスの作成
    return new class()
    {
      // 実行関数
      // php7からはint型などのタイプヒンティングも出来ます
      private function exe(array $conf)
      {
        return $conf;
      }
      // config等のデータを引数で読みとる
      public function do(array $config)
      {
        return $this->exe($config);
      }
      
    }; // 無名クラスにはセミコロンが必要です
    
  } // END func()
  
} // END Class *Helpers

// Helpersクラスfunc関数の呼び出し
var_dump( (new Helpers)->func()->do([1,2]) );


無名クラスを使うことで、PHP7で開発を行う際はライブラリ等の開発が
今までよりも簡単で綺麗に作成できそうです!

PHP7でプロジェクトを進めている方はゼヒ×2新機能をふんだんに使って下さい!

 

この記事のカテゴリ
プログラミング

この記事のタグ