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 :: Функции, аргументы, возвраты.

 PHP.SU

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


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

> Без описания
Bertolomych
Отправлено: 05 Февраля, 2011 - 00:30:21
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


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




Продолжу доставать форумчан ламерскими вопросами..
На сей раз про функции. Вот я всегда использую функции м.. ну, как мне казалось, надлежащим образом. Типа того:
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), либо еще какие-нибудь "извращения" применяют.
Дык вот вопрос - а в чем смысл таких махинаций? И когда их применять, и когда лучше пользоваться ссылками, когда - атрибутами и т.п.?

(Отредактировано автором: 05 Февраля, 2011 - 00:33:28)

 
 Top
grefon
Отправлено: 05 Февраля, 2011 - 00:36:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


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




Это не извращения а обычная работа Радость
Функции - это определенный код, готовый приходится вызывать несколько раз. И код разбивают по функциям для удобства. По этому не нужно к ним относиться как к чему-то, что должно работать только так и никак иначе. Эта такая же часть программы.
Допустим нам нужно сделать сложное сравнение нескольких массивов и если сравнение будет удачным нужно выполнить какое либо действие. Вот тут и не обязательно присваивать какой либо переменной значение функции, чтобы в дальнейшем создавать условие для этой переменной. Можно сразу загнать функцию в условие и проверить вернет ли функция правду или ложь, и в зависимости от этого продолжить работу в нужном направлении.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Bertolomych
Отправлено: 05 Февраля, 2011 - 01:10:12
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


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




grefon пишет:
Это не извращения а обычная работа

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


Частый гость


Покинул форум
Сообщений всего: 136
Дата рег-ции: Сент. 2009  


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




Bertolomych пишет:
Но только не через return, а какими-то странными неисповедимыми путями.

Если переменная передана по ссылке, то результат работы функции будет виден и вне функции, т.е. можно ничего и не возвращать. Другое дело, что по стандартам кодирования PEAR функция должна всегда возвращать значение, если это возможно (в дальнейшем и ошибки легче находить).
 
 Top
Bertolomych
Отправлено: 05 Февраля, 2011 - 02:53:51
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


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




XelaNimed, почему это работает - это я понял. Вопрос в том - зачем так делают?
 
 Top
Ch_chov
Отправлено: 05 Февраля, 2011 - 06:17:28
Post Id



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


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


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




Переменные могут быть очень большого размера (например, при обработке шаблонов). Использование ссылок позволяет обойтись без копирование этих переменных из одной области памяти в другую.
И кстати, в PHP5 объекты всегда передаются по ссылке даже если вы не указываете в сигнатуре оператор &.
 
 Top
Bertolomych
Отправлено: 05 Февраля, 2011 - 23:07:03
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


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




Не понял и опечален что-то меня терзают смутные сомнения, что дело только в памяти..
 
 Top
JustUserR
Отправлено: 06 Февраля, 2011 - 15:11:43
Post Id



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


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


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




Bertolomych пишет:
Дык вот вопрос - а в чем смысл таких махинаций? И когда их применять, и когда лучше пользоваться ссылками, когда - атрибутами и т.п.?
Использование предполагаемого механизма осуществления передачи возвращаемого значения функции в виде сохранения информационного поля указанного в виде ссылки в списке аргументов может являться следствием множества аспектов - во-первых указанных механизма позволяет обеспечивать возможность возврата множества значения в целевые локальные переменные - во-вторых использование механихмв управления элементами потока кода позволяет обеспечить получения дополнительной информации уровня трактования объектов и произвести дополнительную условную обработку сохраняемого значения сгенерированного элемента


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB