Timol
Новичок
Не так давно изучаю ООП и столкнулся с проблемой - как хранить и задействовать настройки для каждого свойства?
В Гугле ответ на свой вопрос я не нашел - возможно просто не о том спрашивал?
Для того, чтобы было понятно, о чем идет речь, ниже я вкратце опишу то, что я пытаюсь сделать сейчас для того, чтобы разобраться в ООП - cвой lite велосипед/framework.
Основная задача framework`a - перегонять данные из одного источника в другой, например, можно взять простые случаи: GET-данные, полученные в форме, нужно передать в БД или вытянуть данные из БД и отобразить в виде HTML.
Для того, чтобы не было проблем с получаемыми данными - все данные строго типизированы. Для примера я буду рассматривать случай, когда GET-данные, полученные в форме, нужно передать в БД. Есть несколько полей формы и соответствующие им колонки в БД: user_name, datetime. Для каждого вида данных я создаю отдельный массив - получается жуткая вложенность, но пока что без знаний ООП, работает все именно так. Ниже пример описания свойств - 2 полей формы, кода хоть и много, но разобраться в нем, я думаю, не составит труда:
На самом деле настроек для каждого свойства намного больше, чем я привел выше, но для того, чтобы объяснить суть моего вопроса - вполне достаточно.
Все эти данные нужны чтобы запустить 2 класса: GetData($cnf) - получить, проверить на ошибки и преобразовать в случае необходимости полученные данные и выдать $data и SetData($cnf, $data) - подготовить данные к записи в БД (escapeslach, etc) и записать.
Как эту "простыню" кода разбить по объектам? Т.е. приблизительно, я это себе представляю так: создаются классы для каждого типа данных (Data/Internal/String, Data/Db/String, Data/Db/Datetime, ...), потом классы (Name, Data)?
Подозреваю, что строгая типизация, наподобие того, что я привел в виде массива, уже кем-то придумана и где-то используется в виде ООП?
В Гугле ответ на свой вопрос я не нашел - возможно просто не о том спрашивал?
Для того, чтобы было понятно, о чем идет речь, ниже я вкратце опишу то, что я пытаюсь сделать сейчас для того, чтобы разобраться в ООП - cвой lite велосипед/framework.
Основная задача framework`a - перегонять данные из одного источника в другой, например, можно взять простые случаи: GET-данные, полученные в форме, нужно передать в БД или вытянуть данные из БД и отобразить в виде HTML.
Для того, чтобы не было проблем с получаемыми данными - все данные строго типизированы. Для примера я буду рассматривать случай, когда GET-данные, полученные в форме, нужно передать в БД. Есть несколько полей формы и соответствующие им колонки в БД: user_name, datetime. Для каждого вида данных я создаю отдельный массив - получается жуткая вложенность, но пока что без знаний ООП, работает все именно так. Ниже пример описания свойств - 2 полей формы, кода хоть и много, но разобраться в нем, я думаю, не составит труда:
PHP:
$cnf['user_name']['name'] = 'Имя пользователя';
$cnf['user_name']['data']['internal']['type'] = 'string';
$cnf['user_name']['data']['internal']['string']['min'] = 2;
$cnf['user_name']['data']['internal']['string']['max'] = 50;
$cnf['user_name']['data']['internal']['string']['pattern'] = '|^[a-z]$|ui';
$cnf['user_name']['data']['internal']['string']['empty'] = false;
$cnf['user_name']['data']['db']['type'] = 'string';
$cnf['user_name']['data']['db']['column'] = 'user_name';
//...
$cnf['datetime']['name'] = 'Дата пользователя';
$cnf['datetime']['data']['internal']['type'] = 'string';
$cnf['datetime']['data']['internal']['string']['min'] = 19;
$cnf['datetime']['data']['internal']['string']['max'] = 19;
$cnf['datetime']['data']['internal']['string']['pattern'] = 'регулярка на соответствие даты такому формату: 2016-12-27 10:20:31';
$cnf['datetime']['data']['internal']['string']['empty'] = true;
$cnf['datetime']['data']['db']['type'] = 'datetime';
$cnf['datetime']['data']['db']['datetime']['timezone'] = $_SESSION['user_timezone'];
$cnf['datetime']['data']['db']['column'] = 'user_date';
//...
Все эти данные нужны чтобы запустить 2 класса: GetData($cnf) - получить, проверить на ошибки и преобразовать в случае необходимости полученные данные и выдать $data и SetData($cnf, $data) - подготовить данные к записи в БД (escapeslach, etc) и записать.
Как эту "простыню" кода разбить по объектам? Т.е. приблизительно, я это себе представляю так: создаются классы для каждого типа данных (Data/Internal/String, Data/Db/String, Data/Db/Datetime, ...), потом классы (Name, Data)?
Подозреваю, что строгая типизация, наподобие того, что я привел в виде массива, уже кем-то придумана и где-то используется в виде ООП?