[PHP-dev 1508] Re: 新潟アクセス修飾子ってのを作りました

komura komura.db2r1e @ gmail.com
2010年 5月 22日 (土) 20:20:11 JST


komura です。

On Sat, 22 May 2010 06:20:44 +0900
rti <super.rti @ gmail.com> wrote:

> php 5.3.2を改造して、クラスの外から読めるけど書けないアクセス修飾子を実装しました。
> http://d.hatena.ne.jp/rti7743/20100520/1274309263

PHP に新しいアクセス修飾子を追加するという試みは面白いと思います。

一つ疑問に思ったのでお聞きしたいのですが、「クラス外から読めるが、
書けない属性」を作成したい場合、__get() を利用すれば同様の機能が
実装できるように思います。


<?php
// PHP 5.1.0 以降で実行可能
class Human
{
    private $Age, $Name, $Address, $Tel;

    public function __construct( $age, $name )
    {
        $this->Age = $age;
        $this->Name = $name;
    }

    public function __get( $key )
    {
        return isset( $this->$key ) ? $this->$key : NULL;
    }
}

$h = new Human( 20, 'Name' );
// 20 が出力
echo $h->Age;

// アクセス不可
$h->Age = 100;
// PHP Fatal error: Cannot access private property Human::$Age in
// /tmp/test.php on line 21


この例では、__get() メソッドを追加する必要がありますが、大量の getter
メソッドを作成する必要はありません。ただ、__get() メソッドを処理する
必要がある分、速度は遅くなります。

新しい修飾子を定義した方が getter の処理は速くなるように思いますが、
他に新しいアクセス修飾子を導入することによるメリットがあれば教えて
ください。

-- 
komura <komura.db2r1e @ gmail.com>


PHP-dev メーリングリストの案内