なんか分からんが今さら、ソーシャルアプリを作りかけている。
久しぶりにPHPやるといろいろ気になる。
社内フレームワークにforward機能たすためのActionControllerのようなものを書いたり、
してこの1週間はすごしてましたが、
アクセサも物凄く面倒なので、オブジェクトクラスを作成した。
こちらを参考に
http://d.hatena.ne.jp/tune34/20080601/1212262870 少し追加した。


 <?php

/**
* Objectクラス
*/
class ObjectAbstract
{
    private $_var = array();

    function __construct($var)
    {
        $this->_var = $var;
    }


    function __get($name)
    {
        $value = null;

        if (isset($this->_var[$name]['default'])) {
            $value = $this->_var[$name]['default'];
        }

        if (isset($this->_var[$name]['value'])) {
            $value = $this->_var[$name]['value'];
        }
        return $value;
    }

    function __set($name, $value)
    {
        try {
            if (array_key_exists($name, $this->_var)) {
                $this->_is($name);
                $this->_isa($name, $value);
                $this->_var[$name]["value"] = $value;
            }
        } catch (Exception $e) {
            throw $e;
        }
    }

/**
*アクセサの追加
*/
protected function _addVar($vars){
foreach($vars as $var){
$this->_var[] = $var;
}
}

    private function _is($name)
    {
        if (isset($this->_var[$name]['is'])) {
            if ($this->_var[$name]['is'] === 'ro') {
                throw new Exception("[{$name}] is ReadOnly.");
            }
        }
    }

    private function _isa($name, $value)
    {
        if (isset($this->_var[$name]['isa'])) {
            switch ($this->_var[$name]['isa']) {
                case 'Str':
                    if (is_scalar($value) === false) {
                        throw new Exception("[{$name}] is not String.");
                    }
                    break;
                case 'Int':
                    if (strval(intval($value)) != $value) {
                        throw new Exception("[{$name}] is not Integer.");
                    }
                    break;
case 'Array':
    if(is_array($value) == false){
                        throw new Exception("[{$name}] is not Array.");
            }
    break;
                default:
     if(is_a( $value, $this->_var[$name]['isa']) == false){
                           throw new Exception("[{$name}] is not ".$this->_var[$name]['isa'].".");
     }
                    break;
            }
        }
    }
}