Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как ведет себя return вне фукнции?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ticksy
Отправлено: 22 Сентября, 2011 - 20:53:29
Post Id


Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Если я вызову оператор return вне функции (в теле файла), то интерпретация текущего файла прекратится (и управление перейдет в файл, который его заинклудил) или как?

В фукнциях часто бывает удобно писать в таком стиле:
PHP:
скопировать код в буфер обмена
  1. if(...) {
  2. echo 'error 1';
  3. return;
  4. }
  5.  
  6. if(...) {
  7. echo 'error 2';
  8. return;
  9. }
  10. ...


Все читается хорошо, не то что:
PHP:
скопировать код в буфер обмена
  1. if(...) {
  2. if(...) {
  3. ...
  4. } else {
  5. echo 'error 2';
  6. } else {
  7. echo 'error 2';
  8. }
  9. }

(Отредактировано автором: 22 Сентября, 2011 - 20:56:13)

 
 Top
Мелкий Супермодератор
Отправлено: 22 Сентября, 2011 - 20:55:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ticksy пишет:
Если я вызову оператор return вне функции (в теле файла), то интерпретация текущего файла прекратится (и управление перейдет в файл, который его заинклудил)

Именно так, да.


-----
PostgreSQL DBA
 
 Top
evgenijj
Отправлено: 22 Сентября, 2011 - 21:24:21
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Мелкий пишет:
Именно так, да.

Что в общем-то нелогично. О чем думали разработчики PHP? С моей точки зрения, вызов return вне функции должен порждать fatal error. Return (согласно синтаксису PHP) может быть использован ТОЛЬКО внутри функции. Использование return ВНЕ функции порождает трудноуловимые ошибки.
Ticksy
Использование недокументированных возможностей языка -- дурной тон. Это -- лишние трудности при поддержке кода.

(Отредактировано автором: 22 Сентября, 2011 - 21:25:28)

 
 Top
DeepVarvar Супермодератор
Отправлено: 22 Сентября, 2011 - 23:13:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




evgenijj пишет:
return вне функции должен порждать fatal error

А давайте посмотрим в сторону continue, или более "страшного" goto ???
Тоже запретим моралью?
 
 Top
OrmaJever Модератор
Отправлено: 23 Сентября, 2011 - 00:43:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




синтаксис php итак не очень богат, пусть в нём будет хоть чтото интересное Подмигивание


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Ch_chov
Отправлено: 23 Сентября, 2011 - 06:10:46
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




evgenijj пишет:
Использование недокументированных возможностей языка -- дурной тон.
Почему не документированных? Всё задокументировано.

Если конструкция return будет вызвана из глобальной области определения (вне пользовательских функций), то скрипт также завершит свою работу, а return также возвратит определенные значения.
http://php.su/learnphp/cs/?rc

Есть некоторые особенности при использовании этой функции совместно с include.
http://php.net/manual/en/function.include.php (см. example #5)
 
 Top
Мелкий Супермодератор
Отправлено: 23 Сентября, 2011 - 09:27:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
А давайте посмотрим в сторону continue

Дык к нему-то как раз претензий нет, он не имеет смысла и вызывает fatal error, будучи вызванным не из цикла.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 23 Сентября, 2011 - 09:33:02
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ни разу не доводилось использовать return ни в том ни в другом случае (то есть ни просто в глобальной области скрипта, ни с расчетом на include). Да и сам include уже не помню когда использовал сам по себе, вне контекста __autoload
Дурные привычки порождают дурной стиль и не очень важно, документирована возможность или нет.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB