Возврат из функции php

Оглавление:

Совет: возврат нескольких значений из функции

Вообще говоря PHP не даёт нам возможности вернуть несколько значений из функции. В то же время мы можем вернуть массив данных и разобрать его различными способами.

В данном примере функция вернёт $var2:

Если же нам нужно оба значения можем вернуть массив и обратиться к элементам по индексу:

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://stackoverflow.com/questions/3451906/multiple-returns-from-function
Перевел: Станислав Протасевич
Урок создан: 27 Апреля 2016
Просмотров: 7173
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

ruseller.com

Возврат значений

Значения возвращаются при помощи необязательного оператора возврата. Возвращаемые значения могут быть любого типа, в том числе это могут быть массивы и объекты. Возврат приводит к завершению выполнения функции и передаче управления обратно к той строке кода, в которой данная функция была вызвана. Для получения более детальной информации ознакомьтесь с описанием return .

Замечание:

Если конструкция return не указана, то функция вернет значение NULL .

Использование выражения return

Пример #1 Использование конструкции return

Функция не может возвращать несколько значений, но аналогичного результата можно добиться, возвращая массив.

Пример #2 Возврат нескольких значений в виде массива

Для того, чтобы функция возвращала результат по ссылке, вам необходимо использовать оператор & и при описании функции, и при присвоении переменной возвращаемого значения:

Пример #3 Возврат результата по ссылке

Для получения более детальной информации о ссылках обратитесь к разделу документации Подробно о ссылках.

Объявление типов возвращаемых значений

В PHP 7 добавлена возможность объявлять тип возвращаемого значения. Аналогично объявлению типов аргументов можно задать тип значения, которое будет возвращаться функцией. Типы, которые можно объявить для возвращаемых значений те же, что и для аргументов фукнций.

Режим строгой типизации также работает для объявлении типа возвращаемого значения. В обычном режиме слабой типизации возвращаемое из функции значение приводится к корректному типу. При строгой типизации возвращаемое значение должно быть заданного типа, иначе будет выброшено исключение TypeError.

Замечание:

Если переопределяется родительский метод, возвращаемое значение дочернего метода должно быть того же типа, что и родительского. Если в родительском методе не задан тип возвращаемого значения, то и дочерний метод этот тип может не объявлять.

Пример #4 Обычное объявление типа возвращаемого значения

php.ru

Возврат из функции php

Мне нравится PHP (если вам не нравится — пожалуйста, забудьте про этот топик. Не надо холиварить) и еще мне нравится одна штука, которая прям везде есть, а в PHP отсутствует:

Что делает этот код? Правильно! Возвращает третий элемент массива, который возвращает superFunction() с аргументами foo и bar.

В PHP-синтаксисе это выглядело бы так:

Вот только этот код выдает Parse Error. «И поделом!» — раздаются уж крики ненавистников синтаксического сахара. Я предлагаю им тоже отправиться подальше от этого топика, чтобы не холиварить и не доказывать, что это не нужно (посмотрите, в каком я блоге это разместил, в конце-то концов).

На сайте PHP я узнал, что такого синтаксиса разработчики позволять не планируют даже в 6 версии. Ну, блин. Я и сам — молодец! Итак, за ночь я написал небольшой класс, который, если его правильно использовать, разрешает работать с массивами по-человечески.

Работает ли это?

Да, Preparser работает. После нескольких часов отладки я смог научить его не глючить, обрабатывая одно мое «большое» приложение, использующее Zend Framework и тысячу всего подряд. Из чего делаю вывод, что глючить он по-умолчанию не станет.
Работает он быстро. Да, он парсит все подключаемые (include и т.п.) фаилы и меняет там все как хочет. Но Preparser обработанный код, разумеется, аккуратненько кеширует и подключает обычным include-ом при повторном запуске скрипта, что не отнимает лишнего процессорного времени вообще. Кстати, Preparser проверяет дату модификации фаилов, так что можно не беспокоиться об очистке кеша с каждой измененной строкой.
Уже отпарсенные фаилы выполняют конструкцию func()[] без потерь производительности. Там ничего страшного не происходит вообще 🙂

Работает он просто. Чтобы взять и перевести ну прям всё огромное большое приложение на Preparser, надо написать 2 или там не знаю, 3 строки. Если вы программируете, меняя глобальные переменные в include-ах, то строк придется добавить чуть больше. Но вы же взрослые люди и давно не делаете таких бяк, правда?
Кстати, глобальные переменные из include-ов меняться перестанут, но команда return $smth; останется работать.
А еще: для совместимости с Zend_View во всех фаилах, заинклуженных внутри классов, продолжает работать $this.
Итак, если вы пишете при помощи Zend Framework, то все будет хорошо. Если у вас какой-то другой цивильный фреймворк без уродливостей вроде глобальных переменных — скорее всего, всё будет хорошо (я не проверял, буду рад вашим отзывам!). Ну а если нет — не знаю, попробовать все равно стоит, благо это просто. Заодно расскажете мне, в чём я не прав 🙂

Ах да, Препарсеру нужен PHP ветки 5.3. 🙂

Preparser работает с фаилами, заинклуженными через него, а также с фаилами, заинклуженными теми фаилами, которые заинклужены через него. Наверное, вы не поняли предыдущую фразу. Окей.

Вариант 1: поиграться

Суть такова: чтобы в php фаиле можно было использовать конструкцию func()[2], его нужно подключить через Preparser. Т.е., создаете, скажем, index.php и hooray.php:

Теперь в hooray.php вы можете использовать самые страшные конструкции (в /tests/dereferencing.php можете найти примеры):

function ret_anything($lol) <
return $lol;
>

assert( ret_anything( array(1, 2, ret_anything(4), ret_anything(array(1, 2, 3))[1])[ ret_anything(array(1, 2, 3))[ret_anything(array(1, 2, 3))[1]] ]) == 2 );

Вариант 2: перевести проект на Preparser

Вот как я изменил index.php для одного крутого сайта:
bootstrap()
->run();

Добавил две строки, а потом поменял одну. Очень сложно! Потом я открыл index.php в браузере и подождал (достаточно долго, минуту почти), пока формировался кеш. После этого все работало быстро и без сучка без задоринки.

Подводные камни?

Не знаю, какие уж там подводные камни. Работать я старался аккуратно. Глобальное пространство имен не засорял. Свежезаинклуженный фаил не получит себе в подарок кучу переменных, он вообще ни одной не получит, кроме, разве что, $this. Ну можете еще подключать свои глобальные переменные директивой global.

Я думаю, вы найдете эти камни быстрее меня — буду рад вашим отзывам!

А, брать эту приблуду с ГуглКода. Опенсорс. Лицензия New BSD, я не вдавался в подробности, но, кажется, вы можете использовать это как хотите и свой код при этом вам открывать не обязательно 🙂

Там еще есть даже не начатый мануал. Я буду рад, если кто поможет мне его написать…

Как помочь?

… да, я буду рад, если кто-нибудь поможет мне написать мануалы и прочее. Я очень хреново говорю по-английски, так что мне немного стыдно за все, что я понаписал в README.txt и HOWTOS.txt. За исправление тамошних ошибок тоже буду благодарен, но одна есть просьба: не пишите о них в комментариях здесь на хабрике, чтобы не засирать эти самые комментарии временными и малоосмысленными сообщениями. У меня есть почты разные, например, [email protected]

Еще я буду благодарен за тестирование. Ну и — особенно — за патчи.

Фичреквесты обязательны. Думаю, еще много чему стоило бы научить парсер php.

Спасибо за внимание!

Делал я это, разумеется, от скуки и никакой поддержки или обоснования необходимости существования не обещаю 8)

m.habr.com

Первое знакомство с функциями php для начинающих

Значение функций для программирования неоценимо. Благодаря им появилась возможность повторного использования кода. Нужно лишь разместить вызов функции в конкретном месте программы, и передать ей новые значения аргументов. Не являются исключением из правил и функции php .

Синтаксис функций в php

В каждом языке программирования работа с функциями имеет свои « тонкости ». Рассмотрим их особенности в php :

  • Определение функции выглядит следующим образом:

Параметры могут быть пустыми. Имя указывается после обязательного слова function . При этом имена функций являются независимыми от регистра.

Это значит, что при объявлении function Main() и function main() подразумевается одна и та же функция. А при вызове одной из них интерпретатор выдаст сообщение об ошибке:

  • В теле функции может находиться любой код. В том числе и определение другой функции. При этом определение может быть расположено в любом месте кода. То есть, в php имеет значение лишь расположение вызова функции;
  • Функция может возвращать лишь одно значение, или ничего. Возврат более одного значения не возможен. При этом тип возвращаемого значения может быть любым.

В результате будет возвращена 1.

Множественную передачу значений можно осуществить при использовании в php массива в функции.
Пример:

В теле функции задаются значения переменным x и y . Затем с помощью встроенной функции array() они записываются в массив.

Значение элементам массива задается при вызове функции с помощь list() .

  • Вызов функции php имеет синтаксис:

Функция вернет 3.

Анонимные функции в php

Анонимные функции в php появились недавно, начиная с версии 5.3 . В более ранних версиях языка их поддержка не была реализована.

Анонимной называется функция, определение которой происходит без указания имени. То есть ее определение происходит в месте вызова. При создании анонимной функции к ней обращаются напрямую, или переменной присваивается ссылка на нее.

Рассмотрим на примерах:

Здесь ссылка на анонимную функцию присваивается переменной func1 . Затем переменная x инициализируется значением func1 и выводится с помощью echo() :

В примере автономная функция function ($v) < return $v >2; > вызывается напрямую в месте определения. Она передается в качестве второго аргумента стандартной функции array_filter() .

Функция mail()

Набор стандартных ( встроенных ) функций в php довольно широк. Многие из них реализуют основные возможности веб-сферы.

Одной из таких является функция mail() . Она отправляет сообщение на указанный почтовый ящик. Ее синтаксис:

Описание принимаемых параметров:

  • to –адрес получателя письма. Должен соответствовать стандарту [email protected] ;
  • subject – тема письма;
  • message – отправляемое сообщение. При этом каждая строка сообщения должна вмещать в себя не более 70 символов. Строки разделяются символом перевода строки ( n ).

Если отправка письма происходит непосредственно на SMTP -сервер с машины на основе Windows , то все точки в конце каждой строки будут удалены. Во избежание этого следует заменить все одиночные точки на двойные с помощью кода:

Необязательные параметры функции mail() :

  • additional_headers – вставляется в конце заголовков отправляемого письма. Используется для добавления заголовков.

Пример отправки простого письма:

А вот пример полностью рабочей формы для отправки сообщений:

Несколько основных причин, почему письмо не отправляется:

  • Письмо не содержит дополнительного заголовка From . Он устанавливается с помощью необязательного параметра additional_headers . Также он может быть выключен по умолчанию в конфигурационном файле php.ini . Если заголовок отсутствует в коде, то интерпретатор выдаст следующее сообщение:
  • Используйте только LF (n) . Некоторые агенты на основе Unix автоматические заменяют LF на CRLF (rn) ;
  • При реализации функции mail() на Windows адрес получателя не должен быть такого вида: Something [email protected]

Может произойти неправильная интерпретация параметра при передаче его почтовому агенту для отправки.

  • Сбои в отправке писем могут возникнуть при размещении вызова mail() в теле цикла. Функция открывает и закрывает соединение с SMTP -сервером после отправки каждого письма.

Обзор стандартных функций php

В стандартный набор php входит большой комплект функций для работы со строками. Подробно рассмотрим несколько из них:

  • 1) substr() – возвращает часть строки. Синтаксис: string substr(string string, int start[, int length]) , где:
  • string string – заданная строка.
  • int start – задает начало подстроки.
  • int length – количество символов в возвращаемой подстроке.
  • 2) strpos() – возвращает позицию подстроки в заданной строке. С помощью необязательного параметра можно задать точку отсчета для поиска. Синтаксис: string strpos(string haystack, string needle[, int offset])

3) strstr() – возвращает подстроку из строки, начиная с указанного символа. Синтаксис: string
strstr(string haystack, string needle)

Функции работы с массивами:

1. count() – возвращает количество элементов в массиве. Синтаксис: int count(mixed var)

2. reset() – устанавливает указатель массива на первый элемент, возвращает его значение.
Синтаксис: reset(array array)
Пример:

3. sort() – сортирует массив по возрастанию. Функция воспринимает любой массив как список. Синтаксис: void sort(array array [, int sort_flags])

В языке PHP существует много функций для работы с датой и временем. Но функция date () в php является основной. Она возвращает строку, отформатированную согласно установленному шаблону format . Временная метка устанавливается аргументом timestamp . Ее синтаксис: string date ( string $format [, int $timestamp = time() ] )

Более подробно обо всех принимаемых значениях аргументов функции можно узнать из документации к php.

Несколько стандартных математических функций:

1. bindec() – преобразует число двоичной системы исчисления в десятичное. Синтаксис: bindec ( string $binary_string )

2. floor() – округляет число до меньшего. Синтаксис: float floor (float $value )

3. rand() –генерирует случайное число из указанного диапазона. Синтаксис: int rand ( int $min , int $max )

Одна ложка меда из бочки

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

www.internet-technologies.ru

ГЛАВА 4. Функции

По завершении работы функции часто бывает полезно вернуть некоторое значение, для чего результат вызова функции обычно присваивается некоторой переменной. Функции могут возвращать значения любых типов, в том числе массивы и списки. Пример приведен в листинге 4.2, где функция calculate_cost() вычисляет налог с заданной суммы и возвращает общую сумму вместе с налогом. Прежде чем переходить к рассмотрению листинга, просмотрите краткое описание алгоритма на псевдокоде:

  • Перед вызовом функции задать значения переменных: $price(цена товара) и $tax(налоговая ставка).
  • Объявить функцию calculate_cost(). При вызове функция получает два параметра: налоговую ставку и цену товара.
  • Вычислить цену с учетом налога и вернуть ее командой return.
  • Вызвать calculate_cost() и присвоить значение, возвращенное функцией, переменной $total_cost.
  • Вывести соответствующее сообщение.

Листинг 4.2. Создание функции для вычисления налога

Функции, не возвращающие значений, также называются процедурами.

Существует и другой способ использования возвращаемых значений, при котором вызов функции включается прямо в условную/циклическую команду. В следующей программе(листинг 4.3) сумма счета пользователя сравнивается с предельным размером кредита. Алгоритм на псевдокоде выглядит так:

  • Объявить функцию check_limit(), которая при вызове получает два параметра. Первый параметр, $total_cost, определяет общую сумму счета, накопленную пользователем до настоящего момента. Второй параметр, $credit_limit, определяет максимальную сумму, которую может потратить пользователь.
  • Если накопленная сумма счета превышает предельный размер кредита, функция возвращает ложное значение(0).
  • Если условие команды i f оказывается ложным, работа функции еще не завершена. В этом случае общая сумма не превышает предельного размера кредита, поэтому функция должна вернуть логическую истину.
  • Вызвать функцию check_limit() в условии команды if. Проверить, какое значение было возвращено при вызове — истинное или ложное. В зависимости от результата проверки выполняется то или иное действие.

Если при вызове check_limit() было получено значение TRUE, мы предлагаем пользователю продолжить закупку. В противном случае пользователь информируется о превышении кредита.

Листинг 4.3. Сравнение текущей суммы счета пользователя с предельным размером кредита

При выполнении листинга 4.3 будет выведено сообщение об ошибке, поскольку значение $cost превышает $limit.

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

  • Объявить функцию best_years(), вызываемую с одним параметром. Параметр $label определяет сорт вина, для которого пользователь хотел бы узнать три рекомендуемых года.
  • Объявить два массива, $merlot и $zinfandel. В каждом массиве хранится три рекомендуемых года для соответствующего сорта вина.
  • Написать команду return, которая бы использовала особые возможности переменных. Выражение $$label сначала интерпретирует переменную $label, а затем интерпретирует полученное значение как имя другой переменной. В настоящем примере массив merlot возвращается в виде списка, и каждый возвращаемый год занимает свою позицию в списке, для которого вызывалась функция.
  • Вывести сообщение с информацией о рекомендуемых годах.

Листинг 4.4. Возвращение функцией нескольких величин

Программа выводит следующий результат:

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

project.net.ru

Смотрите так же:

  • Php определение разрешения Как должен выглядеть код PHP для запроса разрешение браузера клиента? Добрый день, помогите пожалуйста у меня задача, узнать у клиента/посетителя ширину браузера, если она меньше или равна 1024 то нужно вернуть TRUE Т.е. php код со […]
  • Электропогрузчик учебное пособие Интернет-магазин "Хистори-Маркет" Учебное пособие «Водитель электропогрузчика» Автор: Алексеев А.В. Подписано в печать 01.06.2014 Формат 60х90/16. Усл. печ. л. 13.5. Тираж 500 экз. 145 стр. Издательство: ООО «Хистори оф Пипл» 150014, […]
  • Нотариус адреса екатеринбург на уралмаше Нотариус адреса екатеринбург на уралмаше г. Екатеринбург, улица Куйбышева, 44, офис 805,(вход со стороны улицы Белинского, здание Центра международной торговли)телефон (343) 380 74 74 Нотариус: Бурова Ольга ВикторовнаE-mail: Этот адрес […]
  • Областной закон 82 Закон Ленинградской области от 29 ноября 2013 г. N 82-оз "Об отдельных вопросах организации и проведения капитального ремонта общего имущества в многоквартирных домах, расположенных на территории Ленинградской области" (Принят […]
  • Вторжение между ног Правила съема Вторжение между ног. Правила съема Считается, что знакомиться на улице не принято. Однако если вы научитесь делать это правильно, девушка сама с удовольствием предложит вам общение. Не думайте, что яркая и интересная красотка никогда не […]
  • Состав суда в надзорной Состав суда в надзорной Пункт 58 ст. 5 УПК РФ определяет участников как лиц, принимающих участие в уголовном процессе. txt fb2 ePub html на телефон придет ссылка на файл выбранного формата Шпаргалки на телефон — незаменимая вещь при […]

Обсуждение закрыто.