__call или вызов рутинных методов в движке

Комментарии ()

В каждом объекте, который работает с БД, плодятся методы, которые я называю рутинными. Примеров тьма: getLoginById, getIdByLogin, getAliasByName. getNameById и так далее. Поскольку практически суть везде одна и таже (выполнить select с некой таблицы БД по некому признаку и вернуть value) я утвердил в своем движке стандарт вызова метода __call

Для начала договоримся, что в каждом классе, который унаследован от Core, должно присутствовать свойство $call, которое содержит ассоциативный масив следующего виду

  • table - название таблицы по умолчанию, с которой брать данные. Значение задается в конструкторе класса.
  • fields_private - масив с перечнем названия полей, доступ к которым через метод __call нужно закрыть

public function __call($methodName, $args)

$methodName - название несуществующего метода, которого мы вызываем

$args - массив параметров:

первый параметр - значение поля, по которому ищем запись в БД

второй параметр - название таблицы, если нету - используется $call['table']

Пример

В классе User вызываем не существующий метод getEnableById - в даном случаи мне нужно получить значени поля enable из таблицы users по значению поля id. В классе задано свойсто   protected $call = array('table' => 'users', 'fields_private' => array()); 

На самом деле я создал метод   getEnableById только ради автодополнения в IDE. Также методы следует задавать явно, если необходимо выполнить дополнительные действия. В этом примере выполняется проверка на существование  $id (если отсутствует, тогда присвоить  $_SESSION['user']['id'])

 

 public function getEnableById($id = '')
    {
        if ($id == '')
        {
            $id = $_SESSION['user']['id'];
        }
        return parent::__call(__METHOD__, $id);
    }

 


Webit.in.ua 2013