powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Завершить выполнение кода из include-файла
25 сообщений из 54, страница 1 из 3
PHP: Завершить выполнение кода из include-файла
    #38658664
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, как лучше сделать?
Есть скрипт, в котором выполняется include("../lib/checks.php").
В файле checks.php выполняется куча различных проверок. Примерно так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if (check1) {
  if (check2) {
    if (check3) {
      $ret = 'ok';
    } else {
      $ret = 'error3';
    }
  } else {
    $ret = 'error2';
  }
} else {
  $ret = 'error1';
}



Таких проверок много и количество вложенных if слишком большое.
Хотелось бы переписать примерно так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if (!check1) {
  $ret = 'error1';
  break;
}
if (!check2) {
  $ret = 'error2';
  break;
}
if (!check3) {
  $ret = 'error3';
  break;
}
$ret = 'ok';



Но именно так нельзя, потому что break с верхнего уровня не выполняется.
Не подскажите, как лучше сделать?
Желательно более удобное и читаемое, чем такое:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$stop = null
if (!$stop && !check1) {
  $ret = 'error1';
  $stop = true;
}
if (!$stop && !check2) {
  $ret = 'error2';
  $stop = true;
}
if (!$stop && !check3) {
  $ret = 'error3';
  $stop = true;
}
if (!$stop) {
  $ret = 'ok';
}



________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658689
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

непонятно, в чем проблема то?
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658757
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот более реальный код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$var1 = ...;
if ($var1) {
  $res = dbquery($var);
  $var2 = func2($res['field']);
  if ($var2 === '123') {
    $var3 = func3($res['code']);
    if (check3) {
      $ret = 'ok';
    } else {
      $ret = 'error3';
    }
  } else {
    $ret = 'error2';
  }
} else {
  $ret = 'error1';
}


То есть между проверками есть еще какой-то код и в этом случае его также нужно будет заключать внутрь проверки на !$stop.

Пока что я просто использую goto вместо break и все работает.
Но может быть есть что-то более правильное.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658773
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,


Alibek B.проверки на !$stop.
Пока что я просто использую goto вместо break и все работает.
где тут $stop и где тут GOTO?
говорите об одном коде, а показываете другой.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658807
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оформить всю кучу проверок как функцию и возвращать
Код: php
1.
return код_ошибки;

по мере обнаружения. В вызывающей программе проверять возвращаемое значение. Не?
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658829
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleОформить всю кучу проверок как функцию и возвращать
Код: php
1.
return код_ошибки;

по мере обнаружения. В вызывающей программе проверять возвращаемое значение. Не?

скажу даже больше... результатом функции include является результат возвращаемый скриптом.
потому:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
//main script
if (include "subscript.php"){echo "all right";}


//subscript.php
if (!check1) {
  $ret = 'error1';
  return false;
}
if (!check2) {
  $ret = 'error2';
  return false;
}
if (!check3) {
  $ret = 'error3';
  return false;
}
return true;
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658834
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор$ret = 'error1';
return false;

запомните это дети и никогда больше так не делайте.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658844
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтор$ret = 'error1';
return false;

запомните это дети и никогда больше так не делайте.

))) К словам придираетесь, уважаемые?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
//main script
if (include("subscript.php")=='ok'){echo "all right";}


//subscript.php
if (!check1) {
  return 'error1';
}
if (!check2) {
  return 'error2';
}
if (!check3) {
  return 'error3';
}
return 'ok';
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658854
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрScareCrowпропущено...


запомните это дети и никогда больше так не делайте.

))) К словам придираетесь, уважаемые?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
//main script
if (include("subscript.php")=='ok'){echo "all right";}


//subscript.php
if (!check1) {
  return 'error1';
}
if (!check2) {
  return 'error2';
}
if (!check3) {
  return 'error3';
}
return 'ok';



вот так тоже не делайте.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658856
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uговорите об одном коде, а показываете другой.
Если мой код переписать так, как я предположил в конце первого сообщения (с помощью переменной $stop и ленивой проверки условий), то для промежуточных процедур нужно будет использовать дополнительные проверки $stop.

vkleОформить всю кучу проверок как функцию и возвращать return код_ошибки
Можно конечно и так.
Но тогда в этой функции нужно будет объявлять global для множества различных переменных и что-то можно будет упустить.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658864
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторif (include("subscript.php")=='ok')

кстати так не работает.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38658916
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторif (include("subscript.php")=='ok')

кстати так не работает.

а как работает? ))) блин... ну видите синтаксическую ошибку, какого фига не написать "тут ошибся, вот сюда скобку надо"?!!!
Ну понятно, человек такой, ничё не поделать...

Насчёт "так не делайте" - да не хочу я общаться с тобой на эту тему... не хочешь - не делай, только вот если есть причина так не делать, то её надо описывать, а до того - это лично твоё мнение.

Вот проверенный вариант:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?php
   //main script
if ((include "input.txt")=='ok'){echo "all right";}else{echo "not right";}

?>

<?php
//subscript.php
if (!$check1) {
  return 'error1';
}
if (!$check2) {
  return 'error2';
}
if (!$check3) {
  return 'error3';
}
return 'ok';
?>
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659092
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поддерживаю. меня тоже заинтиговало почему не делать???

если чисто ради супер пупер парапупер кодинга, аля возвращать всегда код, притом не числом а константой, и проверки константой то это ладно, но подзреваю что сдесь ещо какаято причина???

ответь пожалуста, почему не делать так?
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659101
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453поддерживаю. меня тоже заинтиговало почему не делать???

если чисто ради супер пупер парапупер кодинга, аля возвращать всегда код, притом не числом а константой, и проверки константой то это ладно, но подзреваю что сдесь ещо какаято причина???

ответь пожалуста, почему не делать так?

все что что-то возвращает должно возвращать либо правильный ответ либо исключение.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659127
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowalex564657498765453поддерживаю. меня тоже заинтиговало почему не делать???

если чисто ради супер пупер парапупер кодинга, аля возвращать всегда код, притом не числом а константой, и проверки константой то это ладно, но подзреваю что сдесь ещо какаято причина???

ответь пожалуста, почему не делать так?

все что что-то возвращает должно возвращать либо правильный ответ либо исключение.

а-а... ну всё понятно )))

А теперь главный вопрос, а кто сказал что "error1" или "error2" являются "неправильными" ответами? Вполне себе нормальная ситуация, человек проверяет состояние некоторого компонента (например некой модели) и смотрит:
1. Заполнено ли название. Если не заполнено вернуть "error1" (ну или логичнее вернуть "Не заполнено название").
2. Заполнено ли количество. Если не заполнено вернуть "error2" (ну или логичнее вернуть "Не заполнено количество элементов").
3. Заполнено ли описание. Если не заполнено вернуть "error3" (ну или логичнее вернуть "Не заполнено описание").

А потом на выход отправляется этот текст ошибки, который выводится пользователю.

Почему только один - например интерфейс предусматривает поле для вывода ошибки ввода (разумеется только одной ошибки).


P.S. Так что я говорю, без описания причины "так не делайте" - всегда Ваше личное мнение. Вот Вы посчитали что тут так, а реально тут может быть совсем и не так.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659141
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

ну он имел ввиду немного другое. сточки зрения космической архитектуры, любая функция, не знает, где имено будет код, умеющий обработать "косяк"

и бросая исключение, это гарантия что при косяк-детектид, мы попадём в код, который знает что в этой ситуации делать.

а почему космическая архитектура...да потому что тогда любую строчку надо заключать в трайкетч, а чего мелочиться

ведь оператор сложения это тоже функция, делает автоприведения типов, а откуда мы знаем что перед сумой учтено, что строка + число это исключение, а не равно числу(ибо строка - 0)

ЗЫ
в твоём случае всётаки лучше код возврата - мне так кажеться.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659179
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА теперь главный вопрос, а кто сказал что "error1" или "error2" являются "неправильными" ответами? Вполне себе нормальная ситуация, человек проверяет состояние некоторого компонента (например некой модели) и смотрит:

а теперь посмотрите как это у нормальных людей сделанно.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659229
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторА теперь главный вопрос, а кто сказал что "error1" или "error2" являются "неправильными" ответами? Вполне себе нормальная ситуация, человек проверяет состояние некоторого компонента (например некой модели) и смотрит:

а теперь посмотрите как это у нормальных людей сделанно.

плиин, ну опять...а пример кода!!!
это очень абстрактно у нормальных людей.
вот на википедии написано, что МВЦ большинство пхп програмистов понимают не верно, и вот куда смотреть к нормальным людям?

а если в зенд, так там неделями можно смотреть пока поймёшь их концепцию...
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659345
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора если в зенд, так там неделями можно смотреть пока поймёшь их концепцию...
медитируй, это полезно.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38659374
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
150 раз уже обсасывали эту тему на форумах (и десятки раз наверное на этом форуме).

Ну что же... повторим:
Исключения - это маяк исключительной ситуации. Ситуации, за которую я как программист некоторого компонента не могу нести ответственность.

1. Ну например, я читаю данные из базы, и внутри функции чтения оказывается что не был передан идентификатор соединения. Работа функции далее бесполезна. Можно вернуть false, но лучше бросить исключение, так как и последующая программа скорее всего будет работать неверно.

2. Например, я отправляю данные через сокет, и вдруг физически рвётся соединение. Я как программист программы передачи данных не имею влияния на данную ситуацию и ничего с ней сделать не могу. Можно передать false, но лучше бросить исключение, так как и последующая программа скорее всего будет работать неверно.

3. Например, я читаю книжку. И дойдя до 125 страницы понимаю, что страниц больше нету, но текст оборвался на полуслове. Можно закрыть книжку и пойти спать (вернуть false), но лучше пойти в магазин и потребовать объяснений (бросить исключение), так как и последующая программа (чтение следующей книги из серии) скорее всего будет работать неверно.

1. Однако, я читаю из базы данные, и мне возвращается пустой массив (данные не найдены). Можно бросить исключение, но... лучше вернуть false, ведь вполне нормально, что на сайте нету например книжек на букву "ъ".

2. Однако, я принимаю данные через сокет и вдруг поток данных заканчивается (длина очередной порции равна нулю). Можно бросить исключение, но... лучше вернуть false, ведь вполне нормально что я принял всё, что мне отправляли и ничего страшного в окончании приёма данных нету, программа продолжает функционировать в штатном режиме.

3. Однако, я читаю книгу. Дойдя до 250-ой страницы, я понимаю, что она закончилась, пошло описание разных терминов, прослеживается законченность мысли, но не прослеживается законченность идеи. Можно конечно пойти в магазин и потребовать объяснений, почему рассказ продаётся по частям, но лучше закрыть книгу и лечь спать :) А завтра пойти в магазин и в штатном режиме купить очередную книгу из серии.


Потому бросание исключений по каждому чиху - это бред. Если моя функция предусматривает на выходе варианты "name is empty", "number is empty", "content is empty" и "ok" , то нету смысла для первых трёх вариантов бросать исключения. Ведь моя функция именно так и документирована
Код: php
1.
2.
3.
4.
5.
<?php
/**
 * Возвращает текст ошибки ввода или ok в случае правильного ввода данных
 */
?>


Потому поведение неправильного ввода является штатным.

И "уважаемый(ая)" ScareCrow, давайте впредь не троллить участников форума. Уж не знаю почему модераторы закрывают на это глаза, но Вам место в ветке ПТ. С Вашим интересом просто ля... сказать, Вам ветка с обычным трёпом ни о чём принесёт много радости :)
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38662207
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хочу, конечно, никого обидеть, но все фрагменты кода приведенные тут, являются, ИМХО, - говнокодом, кой писать не стоит. Написав таким образом большой проект вы замучаетесь его потом поддерживать, особенно когда года через 2 забудете сами что да как там работает. Не говоря уже о том, что поддержка достанется кому-то другому.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38662214
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть даже это будут не исключения, объявите в подключаемом файле внятно называнную функцию с внятными параметрами и используйте ее. Лучше даже вынести в какой-то класс. А если использовать автоподгрузку то можно вообще забыть про эти все include.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38662264
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettНе хочу, конечно, никого обидеть, но все фрагменты кода приведенные тут, являются, ИМХО, - говнокодом, кой писать не стоит. Написав таким образом большой проект вы замучаетесь его потом поддерживать, особенно когда года через 2 забудете сами что да как там работает. Не говоря уже о том, что поддержка достанется кому-то другому.

сам я так не пишу, так как почти все приложения проектирую с использованием ООП, на больших проектах это разумеется удобнее структурного программирования. Однако, чем приведённый код будет усложнять поддержку в случае если весь сайт написан функциями, без использования объектов?

А теперь ещё интереснее... представим, что у нас есть некий набор данных, и есть некоторый набор модулей. Так вот, каждый модуль использует только определённую часть из входных данных. При этом задача максимально упростить встраивание в систему нового модуля. А вызов модуля происходит по пути (то есть явно вводится пользователем). Какая система модулей в данном случае самая простая?

Правильно... единственный файл, который можно загрузить по имени не передавая в него весь список доступных аргументов явно. А модуль уж сам разберётся, что ему из данных надо, а что нет.

Придумайте систему, которую было бы проще чем эту поддерживать и расширять. :) Если предложите вариант проще, я покорно соглашусь что не прав :)

P.S. Варианты, где все используемые данные заталкиваются в один массив не предлагать, потому как именно это точно поддерживать невозможно. Поверьте, я знаю И теперь уже знаю что значит поддерживать проект, в котором модуль привязывается к сайту через специальную функцию внутрь которой передаётся предела 30 аргументов. Просто документация к этой системе велась посредственно, а в какой-то момент её вообще не стало :)

Так что, в поддержание слова "говнокод" жду не говнокод в ответ :)
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38662313
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОднако, чем приведённый код будет усложнять поддержку в случае если весь сайт написан функциями, без использования объектов?

Хотя бы тем, что тут даже функций то и нет, вместо ее вызывается оператор include. Который юзает глобальный набор переменных и может менять их значение или вовсе удалять их.
...
Рейтинг: 0 / 0
PHP: Завершить выполнение кода из include-файла
    #38662318
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрТак что, в поддержание слова "говнокод" жду не говнокод в ответ :)
Думаю как завернуть этот же код хотя бы в функцию вы себе представить можете, поэтому не вижу смысла тратить время на ерунду, доказывая что-то тут :)
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 1 из 3
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Завершить выполнение кода из include-файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]