Nubcoder32
Добрый день форумчане. Собственно проблема: есть такой кусок кода, хотелось бы привести его к божескому виду, может swich? Но на входе массив, подскажите как упростить
PHP:
if($this->params[‘alias’]) { $this->requestParam .= ‘ AND alias = ?’; } if($this->params[‘forSale’]) { $this->requestParam .= ‘ AND old_price > ?’; } if($this->params[‘category’]) { $this->requestParam .= ‘ AND category_id = ?’; } if($this->params[‘categoryArray’]) { $this->requestParam .= ‘ AND category_id IN (‘.R::genSlots($params[‘categoryArray’]).‘)’; } // Случайныe if($this->params[‘rand’]){ $this->requestParam .= ‘ ORDER BY RAND()’; } if($this->params[‘limit’]){ $this->requestParam .= ‘ LIMIT ?’; }
mkramer
Можно массив анонимных функций сделать, хотя в принципе и так неплохо. Для фильтров типичен такой код.
PHP:
$filters = [ «alias» => function () { $this->requestParam .= ‘ AND alias = ?’; } // и так далее ]; $func = $filters[$param]; $func(); }
Дюран
Советую разрабатывать с полностью включенным выводом варнингов и нотисов.
Просто так проверять:Код (Text):
if($this->params[‘category’]) {нотис будет выдавать
Nubcoder32
Не будет)
По идее не должен, или я что-то упускаю?
PHP:
protected $params = [ ‘forSale’ => false, ‘category’ => false, ‘categoryArray’ => false, ‘rand’ => false, ‘content’ => false, ‘limit’ => false, ‘alias’ => false, ‘gallery’ => false ]; public function select($params){ // Загрузить параметры foreach ($params as $k => $v){$this->params[$k] = $v;} … }
mkramer
В таком, как у вас — не будет. Вы просто не показали в первый раз, что у вас всё прединициализировано
Nubcoder32
спс, а то я новичек совсем)
Nubcoder32
Все, что пришло в голову, что бы упростить
1. Сделал функцию у базовой модели (ее наследуют другие модели)PHP:
public function queryBilder($bins, $value = false){ $this->requestParam .= ‘ ‘.$bins; if($value !== false){ $this->requestParam .‘ = ?’; } }И в итоге получилось немного упростить
PHP:
!$this->params[‘alias’] ?: $this->queryBilder(‘alias’, $this->params[‘alias’]); !$this->params[‘category’] ?: $this->queryBilder(‘category_id’, $params[‘category’]); …Вопрос 1) Можно ли писать на подобии !$this->params[‘alias’] ?: … и можно ли еще упростить, что бы убрать ! перед $this->params[‘alias’]
mkramer
@Nubcoder32, цикл foreach, функция array_keys