Разбиение методов - это прежде всего не повторное использование. Это может облегчить чтение, тестирование и обслуживание кода. Четкие имена методов также могут заменить встроенные комментарии. Этот метод делает две вещи высокого уровня, которые можно разделить: создание предложения where с параметрами и без параметров. Еще один намек на то, что логика, которая строит предложение where с опциями, выглядит достаточно громоздкой, чтобы оправдать свой собственный метод.
private function build_where($query_array, $options) {
if(!empty($query_array['WHERE'])) {
$where_array = $query_array['WHERE'];
$columns_array = $this->build_columns_array($query_array);
if (empty($options['sSearch'])) {
return $this->build_where_with_options($where_array, $columns_array, $options);
}
else {
return $this->build_where_without_options($where_array, $columns_array);
}
}
else {
return '';
}
}
Теперь вы можете быстро просмотреть build_where()
, чтобы увидеть, что есть три возможных формы, которые может принимать предложение where, и когда вместе с вводом каждая форма должна выдавать свой результат.
Вот некоторые незначительные улучшения, которые вы можете внести в свой код:
count()
возвращает целое число и не нуждается в вызовах intval()
в ваших циклах for
. Даже если вы оставите их внутри, было бы лучше применить вызов вне цикла, чтобы он выполнялся только один раз, поскольку каждый раз выдает одно и то же значение.
if($searchable_column_val == true)
эквивалентно if($searchable_column_val)
, так как оба приводят $searchable_column_val
к логическому значению, и последнее передается, когда это приведенное логическое значение равно true
.
$where = substr_replace($where, "", -3)
можно заменить на $where = substr($where, 0, -3)
и немного понятнее.
- Вместо того, чтобы проходить по массиву в поисках определенного ключа, вы можете воспользоваться массивами PHP, просто захватив значение с этим ключом.
Для последнего, этот код
foreach($columns_array as $columns_array_key => $columns_array_val)
{
//if the $columns_array_key matches the $column_id
if($columns_array_key == $column_id)
{ ... }
}
можно заменить этим
$columns_array_val = $columns_array[$column_id];
...