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