PHPでデコレーターパターンする

PHPでデコレーターパターンを簡単に書くためのスクリプトを書きました。

akrfjmt/decorated - Packagist

本来のデコレーターパターンはメソッドごとに挟みたい処理を書くのですが、PHPには__callというマジックメソッドがあり、メソッドを1つ定義すると全てのメソッド呼び出しに対して処理を挟むことができます。

  • インスタンスのメソッド呼び出しの前後で
    • トランザクションを張りたい
    • ログを出力したい
    • 実行時間を計測したい

みたいなときに使えると思います。

テストから抜粋
<?php
$yankeeDecorator = new TailDecorator('!?');
$cat = new Cat();

/** @var Cat|Decorated $decorated */
$decorated = new Decorated($cat, $yankeeDecorator);

/** @var Cat|Decorated $doubleDecorated */
$doubleDecorated = new Decorated($cat, $yankeeDecorator, $yankeeDecorator);

// '111222'
$cat->Concat('111', '222');

// 'abcdef!?'
$decorated->Concat('abc', 'def');

// '114514!?!?'
$doubleDecorated->Concat('114', '514');
デコレーターというよりAOPの出来損ないでは?

はい

Revive adserverのインストールについて

この記事は、「第2のドワンゴAdvent Calendar 2017」1日目の記事です。

私はドワンゴ社員ではありません。

Revive adserverとは?

https://www.revive-adserver.com/

  • 広告管理・配信ツール
  • PHPで作られている

「動作を見てみたいなあ」
「誰かの作ったDockerイメージを動かせばいいじゃん」
「なんかバージョン古いな」

ということで、インストールだけやります。

続きを読む