Перегрузка set и get методов

Разрабатывая свои модули для движка, столкнулся с большим количеством сущностей с единообразными методами setVar() и getVar(), тело которых состояло из одной строчки:

    public function getId() {
        return $this->_aData['id'];
    }

    public function setId($data) {
        $this->_aData['id']=$data;
    }


В связи с этим дописал перегрузку методов у класса Entity:


	public function __call($sName, $aArgs)
	{
	    $sActionType = substr( $sName, 0,3 );
	    $sFieldName =  strtolower( substr( $sName, 3 ) );
	    if( $sActionType == 'get' && isset( $this->_aData[$sFieldName ] ) )
	    {
		return $this->_aData[$sFieldName ];
	    }
	
	    if( $sActionType == 'set' && isset( $aArgs[0] ) )
	    {
		$this->_aData[$sFieldName ] = $aArgs[0];
		return true;
	    }
	    return null;
	}

Теперь, в классах, наследуемых от Entity, нет необходимости писать методы для простейших свойств сущности и можно их вызывать просто так :)

Вещь банальная, но, возможно, кому-нибудь пригодиться.

P.S.: есть также вариант с __get и __set для синтаксиса типа $oObject->id и $oObject->id = $id, но это будет немного отличаться от принятого синтаксиса в движке.

2 комментария

avatar
Ага, достаточно удобно…
avatar
Только при этом нужно внимательней следить за вызовом несуществующих методов :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.