У меня следующий фрагмент кода, который написан с использованием условного оператора:
$iPage=($this->request()->get('search') ? $this->request()->getInt('req4') : ($this->request()->getInt('req3') ? $this->request()->getInt('req3') : 1 ));
Я преобразовал это в формат if-else следующим образом:
if($this->request()->get('search')) {
$this->request()->getInt('req4')
} else {
($this->request()->getInt('req3')
}
Кто-нибудь, пожалуйста, помогите мне сказать, правильно ли я преобразовал код? Если я допустил ошибку в этом преобразовании, пожалуйста, исправьте ошибку и дайте мне знать об ошибке.
Это исходный код (с использованием условного оператора), отформатированный, чтобы сделать его более читаемым (внешние скобки не нужны вообще):
$iPage = (
$this->request()->get('search') ?
$this->request()->getInt('req4') :
(
$this->request()->getInt('req3') ?
$this->request()->getInt('req3') :
1
)
);
На первом шаге давайте извлечем $this->request()
в переменную; он облегчает чтение кода и работает быстрее (не выполняйте один и тот же вызов функции четыре раза; каждый раз он возвращает одно и то же значение):
$request = $this->request();
$iPage = (
$request->get('search') ?
$request->getInt('req4') :
(
$request->getInt('req3') ?
$request->getInt('req3') :
1
)
);
Теперь давайте заменим условные выражения на if/then/else
:
$request = $this->request();
if ($request->get('search')) {
$iPage = $request->getInt('req4');
} else {
if ($request->getInt('req3')) {
$iPage = $request->getInt('req3');
} else {
$iPage = 1;
}
}
Теперь давайте заметим, что значение 1
значение по умолчанию $iPage
, Если выполнены некоторые условия относительно запроса, значение $iPage
вычисляется с использованием значений $request
; иначе $iPage
становится 1
, Давайте извлечем эту информацию и упростим код:
// Default value
$iPage = 1;
// Get the request into a variable for faster and shorter code
$request = $this->request();
// If 'search' is set, use 'req4' else use 'req3'
if ($request->get('search')) {
$iPage = $request->getInt('req4');
} else {
if ($request->getInt('req3')) {
$iPage = $request->getInt('req3');
}
}
Теперь мы можем объединить else
с if
он содержит в:
// Default value
$iPage = 1;
// Get the request into a variable for faster and shorter code
$request = $this->request();
// If 'search' is set, use 'req4' else use 'req3'
if ($request->get('search')) {
$iPage = $request->getInt('req4');
} elseif ($request->getInt('req3')) {
$iPage = $request->getInt('req3');
}
Возможно, вам будет легче понять, если мы вернем значение по умолчанию обратно в if
/else
построить, как это:
// Get the request into a variable for faster and shorter code
$request = $this->request();
if ($request->get('search')) {
// If 'search' is provided, use 'req4'
$iPage = $request->getInt('req4');
} elseif ($request->getInt('req3')) {
// else, use 'req3' if provided
$iPage = $request->getInt('req3');
} else {
// else default to 1
$iPage = 1;
}
В качестве альтернативы, если вы не против использовать условный оператор (и получить более компактный код), вы можете упаковать второй if
обратно в ?:
форма с использованием функции, представленной в PHP 5.3 («Начиная с PHP 5.3, можно опустить среднюю часть троичного оператора»):
// Get the request into a variable for faster and shorter code
$request = $this->request();
// If 'search' is provided, use 'req4'
if ($request->get('search')) {
$iPage = $request->getInt('req4');
} else {
// Use 'req3' if provided else default to 1
$iPage = $request->getInt('req3') ?: 1;
}
Используйте любое из приведенных выше преобразований кода; все они дают одинаковый результат.
Я лично предпочитаю последний; это компактно и легко читается.
Нет, конвертация должна быть:
if ($this->request()->get('search'))
$iPage = $this->request()->getInt('req4');
elseif ($this->request()->getInt('req3'))
$iPage = $this->request()->getInt('req3');
else
$iPage = 1;
Правильное преобразование:
if ($this->request()->get('search') {
$iPage = $this->request()->getInt('req4');
} else {
if $this->request()->getInt('req3') {
$iPage = $this->request()->getInt('req3');
} else {
$iPage = 1;
}
}
Однако вы можете объединить первое и второе, если, сделав его