Количество условий, оцениваемых в обоих случаях, одинаково, единственное отличие - это вложенность. Скорее всего, между ними не будет заметной разницы в производительности, и существуют разные мнения о том, какой из них «лучше» с точки зрения удобочитаемости и передового опыта.
В первом примере каждое условие оценивается до тех пор, пока не будет возвращено false
, если только они не все true
, и в этом случае будет выполняться средний (наиболее вложенный) блок if
.
Во втором примере обратное каждого условия оценивается до тех пор, пока не будет возвращено true
, если только они не все false
, в этом случае последний блок if
будет бежать.
Еще один способ написать свой метод тестирования, чтобы избежать вложения (в зависимости от реального языка), - это объединить условия с оператором '&&'
, который будет оценивать их по порядку, пока один из них не вернет false (и, если они все верны, будет выполняться код в блоке if
):
// Combine the conditions with '&&', which will evaluate
// evaluate them in order until one of them returns false
if (is_writable($folder) &&
$fp = fopen($file_path, 'w') &&
$stuff = get_some_stuff() &&
fwrite($fp,$stuff))
{
// ...
}
else
{
return false;
}