PHPのクラスでReadOnlyプロパティは、PHP5以降からさくせすることが出来る。
PHP5から__get, __set等のマジックメソッドが実装されている。
__get, __setはアローの後のプロパティを参照するタイミングでコールされる。
例えば
$obj->property_name = ‘a’;
の場合、__setがコールされる。
$foo = $obj->property_name;
の場合、__getがコールされる。
__get関数の場合、
public mixed __get ( string $name
)
と成っている。引数のnameにはアローの右側の変数名が入っている。例であれば、property_nameが格納されいることになる。
これを利用して、ReadOnlyプロパティを作成することが出来る。
下記にサンプルのクラスを定義する
class TestClass {
protected $node1 = ‘read only node1’;
protected $node2 = ‘read only node2’;
protected $node3 = ‘not access’;
protected $readPropertyList = array( ‘node1,’, ”node2 );public function __get( $name ){
if( in_array( $name, $this->readPropertyList ) ) return $this->$name;
return null;
}
}
上記のクラスをインスタンス化すると…
$obj = new TestClass();
echo var_dump( $obj->node1 );
echo var_dump( $obj->node2 );
echo var_dump( $obj->node3 );
というふうに、protectedのメンバに、readOnly状態でアクセス出来るようになる。
マジックメソッドに関してはこちらを参照のこと