Требуемый параметр Codeigniter следует за необязательным параметром проблема

#php #codeigniter

#php #кодовое устройство

Вопрос:

здравствуйте, вы можете мне помочь, пожалуйста?

Сообщение: Обязательный параметр $order следует за необязательным параметром$, где Имя файла: models/Default_model.php Номер строки: 1

 public function get_all($tableName,$where = array(),$order) {  return $this-gt;db-gt;where($where)-gt;order_by($order)-gt;get($tableName)-gt;result(); }  

Комментарии:

1. Необязательные параметры должны быть определены последними. Не имеет смысла указывать обязательное значение после необязательного, так как вы не можете «пропустить» параметр при вызове функции, по крайней мере, если вы используете версию PHP ниже PHP 8, когда они ввели именованные аргументы. Хотя все равно это не имеет смысла.

2. Как я могу исправить свой код?

3. Либо укажите $order значение по умолчанию, либо измените порядок аргументов на: $tableName, $order, $where = []

4. Давайте посмотрим на это с другой стороны… В чем причина установки параметра $where = array()?

Ответ №1:

Поскольку ТРЕБУЕТСЯ $order, и если предположить, что вы всегда предоставляете $order, то

 public function get_all($tableName,$where = array(),$order='')  

Решим эту проблему … ОДНАКО, если есть вероятность, что вы не предоставите заказ, это приведет к ошибке. Поэтому вам нужно изменить свой код, чтобы быть

 if (!empty($order))  return $this-gt;db-gt;where($where)-gt;order_by($order)-gt;get($tableName)-gt;result(); else  return $this-gt;db-gt;where($where)-gt;get($tableName)-gt;result();  

Комментарии:

1. Итак, может ли это быть короче? верните $this-gt;db-gt;gt;где($где)-gt;gt;gt;order_by(пустой($заказ))? «‘название’, ‘ОПИСАНИЕ'» : $заказ)-gt;получить($имя таблицы)-gt;gt;результат();

2. Ура! Да, это работает, но я всегда находил, что встроенные Ifs (?:) затрудняют отладку в дальнейшем. В настоящее время я имею дело с кучей кода, в котором встроенные ifs являются тройными вложенными, и программист их вообще не () использовал, и php это сейчас действительно не нравится.

3. о’кей, я понял 🙂

4. Если это сработает, отметьте это решение так, чтобы оно стало зеленым.