読者です 読者をやめる 読者になる 読者になる

k-holyのPHPとか諸々メモ

Webで働くk-holyがPHP(スクリプト言語)とか諸々のことをメモしていきます。ソースコードはだいたいWindowsで動かしてます。

値をセットした時に任意のフィルタ処理を行うアクセサクラス

PHP

フレームワークのコードをななめ読みしていると、getterとsetterを兼ねた短い名前のメソッドが使われている例を、ちょくちょく見かけます。
たとえばJava風なら getName(), setName('foo') とするところを、name(), name('foo') とするようなメソッドです。

実はPerlではメジャーな流儀のようで、よく考えるとPHPのネイティブ関数でもこの流儀が結構使われてるんですね。error_reporting()とか。

メソッド名は短くできるし、案外気持ちいいかもと思って、最近Traitのサンプルで流行している(?)アクセサクラスに応用してみました。

__call()と__set()と__get()を利用して、値のセット時に任意のフィルタ処理を行うアクセサクラスです。

FilterableAccessor

これを使って、値のセット時にサニタイズ(言うな)とバリデーションを行うサンプルがこちら。

クロージャ厨みたいなコードですみません。
これ書いてて、__call()でアクセサを実装した場合、__set()ではできないメソッドチェインが実現できることに気付きました。
マジックメソッドで実装するかはともかく、この流儀のメソッドは今後、積極的に使っていこうと思います。