оператор if — Как преобразовать троичное выражение PHP в if-else?

У меня следующий фрагмент кода, который написан с использованием условного оператора:

$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')
}

Кто-нибудь, пожалуйста, помогите мне сказать, правильно ли я преобразовал код? Если я допустил ошибку в этом преобразовании, пожалуйста, исправьте ошибку и дайте мне знать об ошибке.

1

Решение

Это исходный код (с использованием условного оператора), отформатированный, чтобы сделать его более читаемым (внешние скобки не нужны вообще):

$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;
}

Используйте любое из приведенных выше преобразований кода; все они дают одинаковый результат.
Я лично предпочитаю последний; это компактно и легко читается.

2

Другие решения

Нет, конвертация должна быть:

if ($this->request()->get('search'))
$iPage = $this->request()->getInt('req4');
elseif ($this->request()->getInt('req3'))
$iPage = $this->request()->getInt('req3');
else
$iPage = 1;
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;
}
}

Однако вы можете объединить первое и второе, если, сделав его

1
По вопросам рекламы [email protected]