uc
ドキュメント代わりのdoctest(実行可能なドキュメントで各関数なりのコード中に記述されている)に出てきた。
UniqueClassの略(ラッパ)。
PHPにはdoctestなんて仕様はないのでほかのテストで生成したクラスとかぶらないように使うものだと思われる。
ユニークな名前でクラスを生成してるっぽい。
こんな感じで使う
/***
uc($name1,'
public $aaa;
protected function __div__($arg){
if($arg instanceof self){
$this->aaa = str_replace($arg->aaa(),"",$this->aaa);
}
}
');
$obj1 = new $name1("aaa=hogefuga");
$obj2 = new $name1("aaa=fuga");
eq("hogefuga",$obj1->aaa());
eq("hoge",$obj1->div($obj2)->aaa());
*/
ま、テスト以外では使うなといわれたよ。
func_annotation / var_annotation
関数と変数にアノテーションできる仕組み。言語的にアノテーションできないので、少しあれな書き方になる。
/***
uc($class1,'
static protected $__aaa__ = "type=choice(AA,BB,CC)";
static protected $__bbb__ = "type=choice(\'aaa\',\'bbb\',\'cc,c\')";
static protected $__ccc__ = "type=choice";
protected $aaa;
protected $bbb;
protected $ccc;
protected function __choices_ccc__(){
return array("111","222",333);
}
');
$obj = new $class1();
$obj->aaa("BB");
$obj->bbb("bbb");
$obj->ccc("222");
eq(array("AA","BB","CC"),$obj->a("aaa","choices"));
eq(array("aaa","bbb","cc,c"),$obj->a("bbb","choices"));
eq(array("111","222","333"),$obj->a("ccc","choices"));
*/
$aaaに$__aaa__でアノテーションしてる。typeを指定しておくと、$obj->aaa($arg)したときに型やとりうる値をチェックしてくれる。
__choices_ccc__は実行時にとりうる値を動的に指定したい場合に使うみたい。
typeの種類はset_class_memberメソッドを見れば書いてある。
__fm_attr__
$objの$aaaに対してフォーマッティングしたい場合に、何も考えずに$obj->fmAaa()を呼び出すと、__fm_attr__というメソッドが呼び出される。
ただし、これはObjectクラスに以下のような定義箇所があり、個別の設定ができるようになっている。
static protected $___fm_attr___ = "prefix=format";
たとえば$aaaという変数に対してだけ特別な処理を行いたい場合には、次のようなメソッドを定義しておけばこっちが呼び出されるようになる(アクセサはよくわかってないから省いてる)
function formatAaa() { ..do something };
ほかにもこれ系はいろいろあるので、Objectクラスを見ると楽しいはず。ちなみにprivateは動きが変わっても知らんそうだよ。他だって知らんだろうけど。