1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-08 17:34:26 +03:00
ifhub.club/engine/classes/Entity.class.php
Mzhelskiy Maxim dddb5c39e2 Возможность автоматического использования в сущностях set* и get* методов, т.е. без объявления их в классе сущности.
При таком подходе методы называть обязательно в camel style, например, getUserMail -> user_mail
2010-02-07 15:01:27 +00:00

64 lines
1.8 KiB
PHP

<?php
/*-------------------------------------------------------
*
* LiveStreet Engine Social Networking
* Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
* Official site: www.livestreet.ru
* Contact e-mail: rus.engine@gmail.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/
/**
* Абстрактный класс сущности
*
*/
abstract class Entity extends Object {
protected $_aData=array();
/**
* Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность
*
* @param unknown_type $aParam
*/
public function __construct($aParam = false) {
if(is_array($aParam)) {
foreach ($aParam as $sKey => $val) {
$this->_aData[$sKey] = $val;
}
}
}
public function _getData() {
return $this->_aData;
}
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
*
* @param string $sName
* @param array $aArgs
* @return unknown
*/
public function __call($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);
}
}
}
?>