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
Форумы портала PHP.SU :: Версия для печати :: Функции, аргументы, возвраты.
Форумы портала PHP.SU » PHP » Программирование на PHP » Функции, аргументы, возвраты.

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

1. Bertolomych - 05 Февраля, 2011 - 00:30:21 - перейти к сообщению
Продолжу доставать форумчан ламерскими вопросами..
На сей раз про функции. Вот я всегда использую функции м.. ну, как мне казалось, надлежащим образом. Типа того:
PHP:
скопировать код в буфер обмена
  1.  
  2. function anyFunc ($foo){
  3.       //any actions
  4.       //...
  5.       //...
  6.       return $bar
  7. }
  8.  

Ну и вызываем ее в духе

Как мне кажется - это наиболее логичный путь использования. Ну.. и мне вообще другие в голову не приходили, да и в учебниках вроде описывается именно такое использование функций.
Однако, я заметил, что многие не используют такой подход. Они возращают TRUE или вообще ничего не возвращают, а обработанные значения либо передают по ссылкам в перечне аргументов (function anyFunc ($foo, &$bar)), либо присваивают атрибутам класса ($this->bar=$foo*100500), либо еще какие-нибудь "извращения" применяют.
Дык вот вопрос - а в чем смысл таких махинаций? И когда их применять, и когда лучше пользоваться ссылками, когда - атрибутами и т.п.?
2. grefon - 05 Февраля, 2011 - 00:36:42 - перейти к сообщению
Это не извращения а обычная работа Радость
Функции - это определенный код, готовый приходится вызывать несколько раз. И код разбивают по функциям для удобства. По этому не нужно к ним относиться как к чему-то, что должно работать только так и никак иначе. Эта такая же часть программы.
Допустим нам нужно сделать сложное сравнение нескольких массивов и если сравнение будет удачным нужно выполнить какое либо действие. Вот тут и не обязательно присваивать какой либо переменной значение функции, чтобы в дальнейшем создавать условие для этой переменной. Можно сразу загнать функцию в условие и проверить вернет ли функция правду или ложь, и в зависимости от этого продолжить работу в нужном направлении.
3. Bertolomych - 05 Февраля, 2011 - 01:10:12 - перейти к сообщению
grefon пишет:
Это не извращения а обычная работа

Ну, это я так.. Смущение Для красного словца..
Не, ну это понятно. Это просто у нас функция, результат действия которой этот, как его.. булев.
А я говорю, про функции, которые возвращают вполне себе строку, число или массив. Но только не через return, а какими-то странными неисповедимыми путями..
4. XelaNimed - 05 Февраля, 2011 - 01:41:07 - перейти к сообщению
Bertolomych пишет:
Но только не через return, а какими-то странными неисповедимыми путями.

Если переменная передана по ссылке, то результат работы функции будет виден и вне функции, т.е. можно ничего и не возвращать. Другое дело, что по стандартам кодирования PEAR функция должна всегда возвращать значение, если это возможно (в дальнейшем и ошибки легче находить).
5. Bertolomych - 05 Февраля, 2011 - 02:53:51 - перейти к сообщению
XelaNimed, почему это работает - это я понял. Вопрос в том - зачем так делают?
6. Ch_chov - 05 Февраля, 2011 - 06:17:28 - перейти к сообщению
Переменные могут быть очень большого размера (например, при обработке шаблонов). Использование ссылок позволяет обойтись без копирование этих переменных из одной области памяти в другую.
И кстати, в PHP5 объекты всегда передаются по ссылке даже если вы не указываете в сигнатуре оператор &.
7. Bertolomych - 05 Февраля, 2011 - 23:07:03 - перейти к сообщению
Не понял и опечален что-то меня терзают смутные сомнения, что дело только в памяти..
8. JustUserR - 06 Февраля, 2011 - 15:11:43 - перейти к сообщению
Bertolomych пишет:
Дык вот вопрос - а в чем смысл таких махинаций? И когда их применять, и когда лучше пользоваться ссылками, когда - атрибутами и т.п.?
Использование предполагаемого механизма осуществления передачи возвращаемого значения функции в виде сохранения информационного поля указанного в виде ссылки в списке аргументов может являться следствием множества аспектов - во-первых указанных механизма позволяет обеспечивать возможность возврата множества значения в целевые локальные переменные - во-вторых использование механихмв управления элементами потока кода позволяет обеспечить получения дополнительной информации уровня трактования объектов и произвести дополнительную условную обработку сохраняемого значения сгенерированного элемента

 

Powered by ExBB FM 1.0 RC1