Создаем динамические веб-сайты с помощью PHP, MySQL и JavaScript |
Страница 99 из 478 Только что была рассмотрена функция, возвращающая единственное значение. Но существуют также способы получения при выполнении функции сразу нескольких значений. Самый подходящий из них возвращает эти значения в виде массива. В главе 3 уже было показано, что массив похож на связку переменных в одной строке. Использование массива для возвращения значений функции показано в примере 5.3. Пример 5.3. Возвращение нескольких значений в массиве <?php Snames - fix_names("WILLIAM", "henry". "gatES"); echo $names[0] . " " . $names[l] . " " . $names[2]; function fix names($nl, $n2, $n3) { $nl - ucfirst(strtolower($nl)); $n2 = ucfirst(strtolower($n2)); $n3 = ucfirst(strtolower($n3)); return array($nl, $n2, $n3); } У этого метода есть преимущество, заключающееся в том, что все три имени содержатся по отдельности, а не объединяются в одну строку, что дает возможность обращаться к любому пользователю просто по его имени или фамилии, не извлекая каждое имя из возвращаемой строки. Когда в РНР перед именем переменной ставится символ &, парсер знает, что тем самым передается не сама переменная, а ссылка на нее. Это понятие может восприниматься с трудом, поэтому давайте вернемся к метафоре со спичечным коробком, которая использовалась в главе 3. Представьте, что вы не вынимаете клочок бумаги из коробка, не читаете то, что на нем написано, не копируете эту надпись на другой клочок бумаги, не возвращаете оригинал в коробок и не передаете копию функции, а просто привязываете нитку к исходному клочку бумаги и передаете функции второй конец этой нитки (см. рис. 5.2). Теперь, для того чтобы найти данные, к которым она обращается, функция может проследовать по нитке. Таким образом исключаются все издержки на создание копии переменной, предназначенной только для того, чтобы в функции можно было воспользоваться ее значением. Более того, теперь функция может изменить значение переменной. Значит, пример 5.3 можно переписать, чтобы передать ссылки на все параметры, с тем чтобы после этого функция напрямую смогла внести в них изменения (пример 5.4). |