Как вам конструкция?

Главные вкладки

Аватар пользователя OldWarrior OldWarrior 25 июня 2020 в 13:52

Портирую один из кастомных модулей D6. Обнаружил в коде (это реально был рабочий модуль):

<?php
...
function 
poservices_order_create_new(PoserviceMerchant $merchant$email$serviceID 0$data = array()) {
    if (
== $serviceID || false === ($service poservices_get_pServices($merchant->mid$serviceID))) {
        
drupal_set_message('Попытка сохранить пустой заказ.''error');
        break; 
// << what the hell?
    
}
    
// ... код ...
    
return true;

 

// ... код ...
return false;
}
?>

Какое тут поведение ожидается от break; (только навскидку, не подглядывая в Гугл) ? IDE, кстати, подчеркнула эту строку красным.

Комментарии

Аватар пользователя OldWarrior OldWarrior 25 июня 2020 в 14:26

Меня всегда сбивают с толку подобные неоднозначные конструкции.

Например, из user notes к break:

A break statement that is in the outer part of a program (e.g. not in a control loop) will end the script. This caught me out when I mistakenly had a break in an if statement

i.e.


<?php
echo "hello";
if (
true) break;
echo 
" world";
?>

will only show "hello"

Но там-то всё понятно, нет внешнего цикла и внешнего тела вообще.

А здесь-то что хотели сделать? Завершить функцию или завершить работу текущего included-скрипта или, может, вообще завершить PHP-процесс? Хотя последнее не так делается.

---
PS. Опять же, судя по всему функция возвращает булевы значения. Почему бы не вернуть просто FALSE? Коллстек сейчас отслеживать нет желания, но может таки обработчик результата как-то слишком однозначно интерпретирует результат и FALSE считается ошибкой другого характера.