1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-17 07:10:48 +03:00

Возможность автоматического использования в сущностях set* и get* методов, т.е. без объявления их в классе сущности.

При таком подходе методы называть обязательно в camel style, например, getUserMail -> user_mail
This commit is contained in:
Mzhelskiy Maxim 2010-02-07 15:01:27 +00:00
parent 6a38041691
commit dddb5c39e2

View file

@ -36,20 +36,7 @@ abstract class Entity extends Object {
}
public function _getData() {
return $this->_aData;
}
/**
* При попытке вызвать неопределенный метод сущности возвращаем null
* В принципе можно это закомментить чтоб отлавливать ошибки при обращении к несуществующим методам :)
*
* @param string $sName
* @param array $aArgs
* @return unknown
*/
/*
public function __call($sName,$aArgs) {
return null;
}
*/
}
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
*
@ -58,7 +45,20 @@ abstract class Entity extends Object {
* @return unknown
*/
public function __call($sName,$aArgs) {
return Engine::getInstance()->_CallModule($sName,$aArgs);
$sType=strtolower(substr($sName,0,3));
if (!strpos($sName,'_') and in_array($sType,array('get','set'))) {
$sKey=strtolower(preg_replace('/([^A-Z])([A-Z])/',"$1_$2",substr($sName,3)));
if ($sType=='get') {
if (isset($this->_aData[$sKey])) {
return $this->_aData[$sKey];
}
return null;
} elseif ($sType=='set' and isset($aArgs[0])) {
$this->_aData[$sKey]=$aArgs[0];
}
} else {
return Engine::getInstance()->_CallModule($sName,$aArgs);
}
}
}
?>