値をセットした時に任意のフィルタ処理を行うアクセサクラス
フレームワークのコードをななめ読みしていると、getterとsetterを兼ねた短い名前のメソッドが使われている例を、ちょくちょく見かけます。
たとえばJava風なら getName(), setName('foo') とするところを、name(), name('foo') とするようなメソッドです。
実はPerlではメジャーな流儀のようで、よく考えるとPHPのネイティブ関数でもこの流儀が結構使われてるんですね。error_reporting()とか。
メソッド名は短くできるし、案外気持ちいいかもと思って、最近Traitのサンプルで流行している(?)アクセサクラスに応用してみました。
__call()と__set()と__get()を利用して、値のセット時に任意のフィルタ処理を行うアクセサクラスです。
FilterableAccessor
これを使って、値のセット時にサニタイズ(言うな)とバリデーションを行うサンプルがこちら。
クロージャ厨みたいなコードですみません。
これ書いてて、__call()でアクセサを実装した場合、__set()ではできないメソッドチェインが実現できることに気付きました。
マジックメソッドで実装するかはともかく、この流儀のメソッドは今後、積極的に使っていこうと思います。