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]   

> Без описания
arsen4ik
Отправлено: 18 Декабря, 2012 - 20:31:00
Post Id



Новичок


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


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




Здравствуйте!
Предлагаю сжеч на костре всех тех кто пишет тех.документации так как учить по ним нереально.
Например даже на этом сайте, в документации по функциям написано вот что
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. function first_function() {
  3.  echo "<h4>Первая пользовательская функция</h4>";
  4.    function second_function() {
  5.     echo "<h5>Вторая пользовательская функция</h5>";
  6.    }
  7. }
  8. first_function();
  9. second_function();
  10. ?>

Вопрос -- зачем здесь теги <h4>,<h5>? Я что учу HTML? И вот такой мусор мешает усваивать нужный мне материал. Ну а дальше больше и я понял что это маразм и не стал дальше обучатся.
Поэтому прошу помочь мне и объяснить как же работает функция на самом простейшем примере. В частности меня интересует работа с аргументами, как указать аргументы я знаю, а вот как потом обработаные в теле функции аргументы вывести?
Например делаю так
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2. $num = $_GET['num'];
  3.  
  4. function one($num)
  5. {
  6. $a = 100;
  7. $sum = $a + $num;
  8. return $sum;
  9. }
  10.  
  11. echo one($sum);
  12. ?>

В переменной $num содержится число 5 переданное через метод GET но выводится почему то 100 вместо 105.
Скажите что делаю не так, и если можете покажите на примере как это правильно делать.
Заранее спасибо
 
 Top
Toxa
Отправлено: 18 Декабря, 2012 - 20:55:11
Post Id



Посетитель


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


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

[+]


ну правильно все выводится. Вы передаете в функцию переменную, которая нигде не определена и по-умолчанию равна нулю


-----
Удобный сервис для хранения файлов
 
 Top
DelphinPRO
Отправлено: 18 Декабря, 2012 - 20:56:35
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. $num = $_GET['num']; // определяем переменную $num. пусть в нее заносится 100
  2.  
  3. // здесь начинается определение функции
  4. function one($param) // у функции один обязательный параметр
  5. {
  6.     // локальная (внутренняя, не видна снаружи) переменная
  7.     $a = 100;
  8.     // к локальной переменной прибавляем то,
  9.     // что передали в функцию как параметр
  10.     $sum = $a + $param;
  11.     // возвращаем результат
  12.     return $sum;
  13. }
  14. // здесь заканчивается определение функции
  15.  
  16. // здесь мы вызываем нашу функцию
  17. // передавая ей параметром переменную, определенную вначле скрипта
  18. // напомню, что $num у нас для примера равно 100
  19. echo one($num); // внутри функции выполняются действия и выводится то что вернула функция.
  20. // в нашем случае число 200
  21.  


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
arsen4ik
Отправлено: 18 Декабря, 2012 - 20:58:09
Post Id



Новичок


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


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




Toxa пишет:
ну правильно все выводится. Вы передаете в функцию переменную, которая нигде не определена и по-умолчанию равна нулю

Понял) Это из за того что сама переменная находится за пределами тела функции.
А если например нет возможности создавать переменную в пределах функции как тогда поступать? Можно ли её сделать глобальной?
(Добавление)
DelphinPRO пишет:
PHP:
скопировать код в буфер обмена
  1. $num = $_GET['num']; // определяем переменную $num. пусть в нее заносится 100
  2.  
  3. // здесь начинается определение функции
  4. function one($param) // у функции один обязательный параметр
  5. {
  6.     // локальная (внутренняя, не видна снаружи) переменная
  7.     $a = 100;
  8.     // к локальной переменной прибавляем то,
  9.     // что передали в функцию как параметр
  10.     $sum = $a + $param;
  11.     // возвращаем результат
  12.     return $sum;
  13. }
  14. // здесь заканчивается определение функции
  15.  
  16. // здесь мы вызываем нашу функцию
  17. // передавая ей параметром переменную, определенную вначле скрипта
  18. // напомню, что $num у нас для примера равно 100
  19. echo one($num); // внутри функции выполняются действия и выводится то что вернула функция.
  20. // в нашем случае число 200
  21.  


Вот спасибо, теперь я понял)
 
 Top
DelphinPRO
Отправлено: 18 Декабря, 2012 - 21:06:30
Post Id



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


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


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




arsen4ik пишет:
Можно ли её сделать глобальной?

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

PHP:
скопировать код в буфер обмена
  1. $foo = 100;
  2. function bar(&$param){
  3.   $param++;
  4. }
  5.  
  6. echo bar($foo); // выведет «101»


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
arsen4ik
Отправлено: 18 Декабря, 2012 - 21:19:32
Post Id



Новичок


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


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




Так сделал, спасибо. Правда начал с примера по сложнее, сделал функцию которая если у браузера англ.язык переводит имя написанное на русском в транскрипт, передаю 2 аргумента
1) текст
2) язык
PHP:
скопировать код в буфер обмена
  1. function transcript($texts,$langs)
  2. {
  3. $transcript = array("а" => "a", "б" => "b", "в" => "v", "г" => "g", "д" => "d", "е" => "e", "ё" => "e", "ж" => "zh", "з" => "z", "и" => "i",
  4. "й" => "i", "к" => "k", "л" => "l","м" => "m", "н" => "n","о" => "o","п" => "p","р" => "r","с" => "s","т" => "t","у" => "u","ф" => "f",
  5. "х" => "h","ц" => "c","ч" => "ch","ш" => "sh","щ" => "shch","ь" => "'","ы" => "y","ъ" => "'","э" => "e","ю" => "u","я" => "ya","А" => "A",
  6. "Б" => "B", "В" => "V", "Г" => "G", "Д" => "D", "Е" => "E", "Ё" => "E", "Ж" => "ZH", "З" => "Z", "И" => "I", "Й" => "I", "К" => "K",
  7. "Л" => "L","М" => "M","Н" => "N","О" => "O","П" => "P","Р" => "R","С" => "S","Т" => "T","У" => "U","Ф" => "F","Х" => "H","Ц" => "C",
  8. "Ч" => "CH","Ш" => "SH","Щ" => "SHCH","Ь" => "'","Ы" => "Y","Ъ" => "'","Э" => "E","Ю" => "U","Я" => "YA");
  9.  
  10. if($langs == "rus")
  11. {
  12. $name = $texts;
  13. }
  14. else
  15. {
  16. $name = strtr($texts,$transcript);
  17. }
  18.  
  19. return $name;
  20. }
  21.  
  22.  


И вывожу
PHP:
скопировать код в буфер обмена
  1. <?
  2. echo transcript($usname,$lang);
  3. ?>

(Отредактировано автором: 18 Декабря, 2012 - 21:25:12)

 
 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