Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Думаю, это будет вопрос скорее по PHP, но всё же структура Laravel тоже имеет влияние. Может быть, Вы в ответе предложите один из инструментов Laravel.
Итак, я хочу избежать хардкоднга, потому храню имена таблиц и их полей, псевдонимы маршрутов и т. д. в массиве, а вернее, в отдельном классе, например:
class References {
const DB_TABLES = array(
'pages' => array(
'tableName' => 'pages',
'fieldNames' => array(
'id' => 'id',
'pagename' => 'name',
'title' => 'title',
'metadesc' => 'metadesc',
'keywords' => 'keywords'
)
);
}
Обращение к этому массиву длиннее, чем прямое указание строкового значения, зато легко переименовать поле без внедрения в логику:
use App\Extenders\References as REF;
private function getTopPageHtmlHeadData(){
return DB::table(REF::DB_TABLES['pages']['tableName'])
-> where(REF::DB_TABLES['pages']['fieldNames']['pagename'], REF::OPEN_PAGE_NAMES_IN_DB['top'])
-> first();
}
Вопрос у меня такой: насколько такое средство избежания хардкодинга отрицательно скажется на производительности и какие более быстрее, но не хардкодные альтернативы есть?
Изменено Gleb2708 (02.02.2018 02:44:58)
Не в сети
Вопрос у меня такой: насколько такое средство избежания хардкодинга отрицательно скажется на производительности и какие более быстрее, но не хардкодные альтернативы есть?
Пока массив маленький - никак не скажется.
Думаю идеальный для твоего желания паттерн - Presenter.
https://habrahabr.ru/post/309942/ (мне статья не очень понравилась)
Если есть платный аккаунт на ларакасте - можешь там ознакомиться с его использованием.
Изменено covobo (02.02.2018 10:50:39)
Не в сети
Использование многомерных массивов абсолютно никак не отражается на производительности. Доступ в массивах даже с сотнями-тысячами элементов происходит моментально (в большинстве случаев), т.к. внутри используется хэш-таблица.
В PHP классы, по сути, это те же массивы с тем же временем доступа, но никого же не смущает использование $obj->foo->bar->baz, при том, что некоторые классы (особенно старые в духе PHP 4) имеют по сотне свойств - а это, считай, тот же многомерный массив.
Не в сети