ReadOnlyプロパティを実装する

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状態でアクセス出来るようになる。

マジックメソッドに関してはこちらを参照のこと