Файл темы functions.php в wordpress
Содержание:
- Недостатки пользовательских функций PHP
- Примеры использования нового ключевого слова USE (начиная с PHP 5.3)
- Встроенные php функции
- PHP Function Arguments
- Proposal
- Кроссворд №1
- Возможности языка
- functions.php против плагинов
- Генерирование уникальных ID
- Анонимная функция как callback
- PHP Объявления типа return
- Зачем нужны функции?
- 5 последних уроков рубрики «PHP»
- Вызывать PHP функцию из другого php файла
- Популярные статьи:
- Анонимные функции
- Необязательные параметры (параметры по умолчанию) функции
- Возможности functions.php
- Какими особенностями обладают пользовательские функции в PHP?
- Вложенные функции
- Создание Closure с анонимной функцией
- Создания функции в PHP:
- Заключение
Недостатки пользовательских функций PHP
У пользовательских функций в PHP есть и ряд минусов:
1.Нельзя объявить локальные функции. Сделать это так, как в других языках программирования, не получится. Вы попросту не сможете создать функцию внутри другой функции, чтобы 1-я вложенная функция была видна лишь во 2-ой функции. В языке программирования PHP такая вложенная функция станет доступна полностью всей программе (скрипту), то есть попросту не будет локальной.
Давайте объясним это на примере:
<?php function first_function() { echo "<h4>1-я пользовательская функция</h4>"; function second_function() { echo "<h5>2-я пользовательская функция</h5>"; } } first_function(); second_function(); ?>
В данном примере мы получим следующий вывод:
1-я пользовательская функция 2-я пользовательская функция
Это значит, что программе доступны обе функции. Таким образом, 2-я функция локальной не является.
2.Следующий минус пользовательских PHP-функций связан с областью видимости функций. Но прежде давайте поясним, какие переменные у нас глобальные, а какие локальные.
К глобальным относят переменные, доступные всей программе, включая подпрограммы. К локальным — переменные, определённые внутри функции (подпрограммы). То есть они доступны лишь внутри функции, в которой определены.
Для языка PHP все переменные, которые объявлены и используются в функции, по умолчанию локальны для функции. Таким образом, у вас отсутствует возможность по умолчанию изменить значение глобальной переменной в теле функции.
Когда вы будете в теле пользовательской функции использовать переменную с именем, которое идентично имени глобальной переменной (находится вне пользовательской функции), то эта локальный переменная не будет иметь ни малейшего отношения к глобальной переменной. В такой ситуации в пользовательской функции создаётся локальная переменная с именем, которое идентично имени глобальной переменной, причем доступна эта локальная переменная будет лишь внутри данной пользовательской функции.
Вот как это выглядит на практике:
<?php $a = 100; function funct() { $a = 70; echo "<h4>$a</h4>"; } funct(); echo "<h2>$a</h2>"; ?>
Сценарий выведет сначала 70, а потом 100:
70 100
Чтобы избавиться от вышеописанного недостатка, в PHP есть специальная инструкция global — она позволяет работать с глобальными переменными пользовательской функции.
Примеры использования нового ключевого слова USE (начиная с PHP 5.3)
Рассмотрим пример:
PHP
$max_comp = function ($max) {
return function ($v) use ($max) { return $v > $max; };
};
$input = array(1, 2, 3, 4, 5);
$output = array_filter($input, $max_comp(2));
1 |
$max_comp=function($max){ returnfunction($v)use($max){return$v>$max;}; }; $input=array(1,2,3,4,5); $output=array_filter($input,$max_comp(2)); |
В этом примере ключевое слово USE позволяет анонимным функциям получить доступ к внешним переменным. Чтобы было понятнее, рассмотрим еще один более простой пример:
PHP
$string = «Hello World!»;
$closure = function() use ($string) { echo $string; };
$closure();
1 |
$string=»Hello World!»; $closure=function()use($string){echo$string;}; $closure(); |
Таким образом, если мы хотим использовать в анонимных функциях переменные из глобальной области видимости, то должны их через USE. Кроме того, по умолчанию, таким образом, передаются только значение переменной, а если Вам нужно, чтобы она менялось за пределами анонимной функции, то ее необходимо передавать по адресу, вот так:
PHP
$x = 1;
$closure = function() use (&$x) { ++$x; };
echo $x . «<br />»;
$closure();
echo $x . «<br />»;
$closure();
echo $x . «<br />»;
1 |
$x=1; $closure=function()use(&$x){++$x;}; echo$x.»<br />»; $closure(); echo$x.»<br />»; $closure(); echo$x.»<br />»; |
В приведенном примере, переменная $x будет меняться при каждом вызове анонимной функции. Из пользы от использования анонимных функций можно отметить то, что они не засоряют пространство имен, а уничтожают все переменные автоматически после окончания своего выполнения.
Встроенные php функции
Функция — фрагмент кода программы, который можно выполнять многократно в любом месте данной программы.
Все функции языка PHP подразделяются на:
- встроенные
- пользовательские
Встроенные функции — это предусмотренные синтаксисом языка конструкции, выполняющие конкретные действия. Примером могут служить рассмотренные ранее функции и .
Кроме того, есть функции для работы с изображениями, функции обработки строк, для работы с датами и временем, а также для работы с базами данных. Некоторые из них будут рассмотрены в последующих уроках.
Что необходимо знать про любые функции:
- после названия функции всегда ставятся круглые скобки (могут быть пустые или с аргументами функции внутри, перечисленными через запятые);
- функция может принимать информацию из программы через список аргументов, разделенных запятыми (аргументы читаются слева направо);
- если в функцию передаются аргументы не того типа, на который она «рассчитывает» (например вместо ), то будет выдаваться либо либо ошибка;
- для вызова функции достаточно написать ее имя и список фактических аргументов в круглых скобках.
Рис. 5.1. Пример использования встроенных функций php
PHP Function Arguments
Information can be passed to functions through arguments. An argument is just
like a variable.
Arguments are specified after the function name, inside the parentheses. You
can add as many arguments as you want, just separate them with a comma.
The following example has a function with one argument ($fname). When the
familyName() function is called, we also pass along a name (e.g. Jani), and the
name is used inside the function, which outputs several different first names,
but an equal last name:
Example
<?phpfunction familyName($fname) { echo «$fname Refsnes.<br>»;
}familyName(«Jani»);familyName(«Hege»);
familyName(«Stale»);familyName(«Kai Jim»);familyName(«Borge»);?>
The following example has a function with two arguments ($fname and $year):
Example
<?phpfunction familyName($fname, $year) { echo «$fname Refsnes. Born in $year <br>»;}familyName(«Hege», «1975»);
familyName(«Stale», «1978»);familyName(«Kai Jim», «1983»);?>
Proposal
The proposal is to combine existing keywords to a new sequence that allows importing functions into a namespace. This should make namespaced functions less of a pain to use and discourage placing them in the global namespace.
Since functions and classes are in separate namespaces, it is not feasible to use the use keyword for both, as it would likely result in conflicts and overhead.
Instead of introducing a new keyword, it would be possible to combine use and function to a sequence. This new use function combo would work as follows:
namespace foo\bar { function baz() { return 'foo.bar.baz'; } function qux() { return baz(); } } namespace { use function foo\bar\baz, foo\bar\qux; var_dump(baz()); var_dump(qux()); }
All of this applies not only to functions, but also to namespaced constants. For consistency, a use const sequence should also be introduced, that does the same thing for constants:
namespace foo\bar { const baz = 42; } namespace { use const foo\bar\baz; var_dump(baz); }
Just like classes, it should be possible to alias imported functions and constants:
namespace { use function foo\bar as foo_bar; use const foo\BAZ as FOO_BAZ; var_dump(foo_bar()); var_dump(FOO_BAZ); }
Кроссворд №1
Итак, я постарался сделать кроссворд не из самых лёгких, так как считаю своих читателей людьми образованными и смышлёными, а такие люди не нуждаются в поддавках. Ещё раз напоминаю, что все подробности об участии в конкурсе по разгадыванию кроссвордов находятся тут. Скажу только, что победитель получит славу, золото и женщин обратную ссылку на его (или её) сайт.
Желаю удачи!
У Вас либо старый браузер, либо отключена поддержка Javascript.Работа кроссворда невозможна.
Проверить ошибки
Пожалуйста, оцените эту статью
Средняя оценка: 4.84 из 5 (проголосовало: 31)
Статья оказалась вам полезной? Подпишитесь, чтобы не пропустить новые!
Вы можете помочь развитию проекта, сделав всего 1 клик:
Возможности языка
Позвольте мне сделать краткое лирическое отступления и рассказать, что на PHP можно писать не только сайты. Его можно использовать и для создания оконных (десктоп) приложений или консольных приложений, которые будут работать как и любое другое приложение Windows, пользователям не понадобиться для этого браузер, а вам не понадобиться сервер. Конечно, PHP является далеко не лучшим выбором для создания десктоп приложений, однако такая возможность есть.
Кроме этого PHP, помимо создания web-страничек (HTML), может генерировать настоящие PDF файлы, XML, изображения, диаграммы и даже Flash ролики. Вдобавок к сохранению всего вышеперечисленного на жёсткий диск, PHP может генерировать и отдавать файлы пользователям «на лету», без сохранения их куда-либо.
В прошлых статьях мы узнали, что такое функции, зачем они нужны и как создавать собственные. Но на самом деле не стоит спешить писать собственные функции, ведь в PHP уже есть сотни встроенных функций, которые станут вашими незаменимыми и надёжными помощниками при разработке веб-приложений.
Так как среди моих читателей многие делают сайты на популярных CMS (Joomla, WordPress и других), а также многие из них мало знакомы с PHP и программированием в целом, то спешу объяснить, что встроенные функции PHP можно использовать в любой CMS, в любом месте! И при этом от вас не требуется ничего настраивать и устанавливать дополнительно, так как встроенные функции, в отличие от пользовательских, вшиты в ядро PHP и никуда от туда деться не могут.
Список всех встроенных функций и возможностей PHP в целом можно узнать на официальном сайте: http://php.net в разделе документации. Но прежде чем вы ринетесь изучать документацию или продолжите чтение данной статьи, я должен объяснить вам, как пользоваться документацией, причём документацией не только по PHP, но и любого другого языка программирования.
functions.php против плагинов
— «Плагины работают медленнее чем код в файле functions.php», говорят неосведомленные — это не так!
Нет никакой разницы в скорости работы кода, не важно подключается он через плагин или через файл functions.php. Подробнее читайте в отдельной заметке
Теоретически вставка кода в functions.php равносильна установке плагина, но это не одно и тоже. Ведь при смене темы, мы получим совершенно другой functions.php и все внесенные изменения будут потеряны, а вот плагин останется, сколько тему не меняй. С этих соображений и нужно относится к файлу functions.php. Если добавляемый функционал относится не только к теме, но и к сайту в целом, то стоит задуматься о подключении его в виде плагина.
Второй пример выше «Данные о количестве запросов к базе данных в подвале админки». По логике не подходит для использования в файле functions.php. Потому что, если мы сменим шаблон, то мы потеряем этот функционал, а он используется в админке и нужен независимо от того какая тема используется.
Поэтому, давайте удалим его из functions.php и сделаем из него плагин — это просто!
Чтобы создать плагин нужно создать файл с кодом ниже (название файла может быть любое), добавить его в каталог плагинов wp-content/plugins/ и активировать плагин в админ-панели:
<?php /** * Plugin Name: Здесь любое название плагина */ // код плагина add_filter( 'admin_footer_text', 'wp_usage' ); function wp_usage(){ echo sprintf( __( 'SQL: %d за %s сек. %s MB', 'km' ), get_num_queries(), timer_stop( 0, 3 ), round( memory_get_peak_usage()/1024/1024, 2 ) ); }
Если нет желания видеть еще один плагин в админ-панели, то можно использовать Must-Use плагины.
Генерирование уникальных ID
Бывают такие моменты, когда вам надо сгенерировать уникальную строку. Множество раз я видел, что для решения этой задачи используют функцию md5():
// генерируем случайную строку echo md5(time() . mt_rand(1,1000000));
Но на самом деле для этих целей в PHP есть специальная функция uniqid()
// генерируем случайную строку echo uniqid(); /* выведет 4bd67c947233e */ // ещё разок echo uniqid(); /* выведет 4bd67c9472340 */
Невооружённым взглядом можно заметить, что первые символы мягко говоря схожи… Так происходит из-за того, что данный метод использует время сервера для генерации символов. Это даже полезно, т.к. все сгенерированные значения получаются в алфавитном порядке, что даёт возможность быстро их сортировать.
Для того чтобы уменьшить шансы получения дубликата, мы можем добавить префикс или использовать второй параметр (увеличит количество символов):
// с префиксом echo uniqid('foo_'); /* выведет foo_4bd67d6cd8b8f */ // со вторым параметром echo uniqid('',true); /* выведет 4bd67d6cd8b926.12135106 */ // оба echo uniqid('bar_',true); /* выведет bar_4bd67da367b650.43684647 */
Этот метод генерирует строки размером меньше, чем md5, тем самым вы сможете сэкономить место.
Анонимная функция как callback
Давайте рассмотрим следующий пример callback функции:
$names = ; function upperCase($name) { return "Хай " . ucfirst( $name ); } print_r ( array_map( upperCase, $names ) );
В этом примере, обозначили массив с двумя имена в нижнем регистре. На третье строчке, у нас функция, которые принимает значение параметр в виде имени, переводит первую букву имени в верхний регистр и возвращает результат.
В сам конце мы используем . Первый аргумент — это функция обозначенная выше, второй — это имена с первой строчки.
Результат вывода:
Array ( => Хай Alex => Хай Petr )
Надо бы переписывать пример выше, так как в реальной жизни вы не должны писать мини функцию в таком случае, иначе размер вашего файла будет расти и расти, а это не есть хорошо 🙂
Смотрите новый вариант, который состоит всего из 5 строк:
$names = ; print_r ( array_map( function($name) { return "Хай " . ucfirst( $name ); }, $names ) );
Результат точно такой же как и в примере выше.
PHP Объявления типа return
PHP 7 также поддерживает объявления типов для оператора . Как и в случае объявления типа для аргументов функции, включение строгого требования приведет к «Fatal Error» при несовпадении типов.
Чтобы объявить тип для возвращаемой функции, добавьте двоеточие ( ) и тип непосредственно перед открытием фигурной скобки ( ) при объявлении функции.
В следующем примере мы указываем тип return для функции:
Пример
<?php declare(strict_types=1); // строгое требованиеfunction addNumbers(float
$a, float $b) : float { return $a + $b;}echo addNumbers(1.2, 5.2);
?>
Вы можете указать тип возвращаемого значения, отличный от типа аргумента, но убедитесь, что возвращаемый тип является правильным:
Пример
<?php declare(strict_types=1); // строгое требованиеfunction addNumbers(float
$a, float $b) : int { return (int)($a + $b);}
echo addNumbers(1.2, 5.2); ?>
Зачем нужны функции?
Казалось бы, ну функция и что? Мы могли бы эту строчку просто написать 3 раза и без функции. Могли, но если мы вдруг захотим что-то поменять в этом фрагменте, то менять нам придётся всего в одном месте, а не в трёх. Но это ещё не всё! Сейчас мы рассмотрели простой вариант, когда всё рядом и в одном файле. В жизни же в файле может быть тысячи строк, и раскиданы они могут быть хаотично по всему файлу.
Одно дело зайти и поменять всё в одной функции, другое дело менять в 10 местах да ещё и искать по всему файлу. Но и это не всё! Сайты не состоят из одного файла, какой-нибудь фрагмент кода нам мог бы пригодиться в десятках различных файлов, и нам пришлось бы искать все повторения этого кода кучу времени. Благодаря функциям мы знаем, что, например, все функции мы храним в таком-то файле, зайду туда, и поменяю один раз.
То есть можете взять себе такое правило: если какой-то участок кода будет повторяться, то обязательно делаем из него функцию!
5 последних уроков рубрики «PHP»
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак
В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение
В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Вызывать PHP функцию из другого php файла
Бывают такие случаи, когда удобно создать один файл для функции, а для остальных файлов только вытягивать нужную вам функцию. Ярким примером будет файл «functions.php» на Wordoress.
Чтобы указать путь к файлу с функцией, достаточно прописать вот этот код:
<?php require_once ('путь к файлу с функцией'); ?>
Для примера, создайте файл «functions.php» с таким кодом:
<?php function bloggood_ru($link,$title) { echo "<a href='$link'>$title</a>"; } ?>
Теперь создадим файл «test.php» с таким кодом:
<html> <head> <title>функции PHP - BlogGood.ru</title> </head> <body> <?php require_once('functions.php'); bloggood_ru('https://bloggood.ru/','Блог BlogGood.ru – создание сайта!'); ?> </body> </html>
Результат:
Вот и все пироги.
Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓
Популярные статьи:
-
Как узнать id компьютера
Дата: 29 Март 2013
Прокомментировано:90
просмотров: 312659 -
Размеры форматов листов А0 – А7
Дата: 23 Январь 2013
Прокомментировано:3
просмотров: 261029 -
Смешные логические загадки с подвохом, отгадки прилагаются
Дата: 12 Ноябрь 2014
Прокомментировано:5
просмотров: 186528 -
Установка windows 7 на ноутбук
Дата: 18 Декабрь 2012
Прокомментировано:169
просмотров: 181206 -
Как включить или отключить Aero в Windows 7
Дата: 1 Июнь 2013
Прокомментировано:6
просмотров: 152869
Анонимные функции
Анонимные функции, также известные как замыкания (closures),
позволяют создавать функции, не имеющие определенных имен.
Они наиболее полезны в качестве значений
-параметров,
но также могут иметь и множество других применений.
Анонимные функции реализуются с использованием класса
Closure.
Пример #1 Пример анонимной функции
Замыкания также могут быть использованы в качестве значений
переменных; PHP автоматически преобразует такие выражения
в экземпляры внутреннего класса Closure.
Присвоение замыкания переменной использует тот же синтаксис,
что и для любого другого присвоения, включая завершающую
точку с запятой:
Пример #2 Пример присвоения анонимной функции переменной
Замыкания могут также наследовать переменные из родительской
области видимости. Любая подобная переменная должна быть
объявлена в конструкции use. Начиная с
PHP 7.1, эти переменные не должны включать superglobals,
$this и переменные с теми же именами, что и
параметры функции.
Пример #3 Наследование переменных из родительской области видимости
Результатом выполнения данного примера
будет что-то подобное:
Notice: Undefined variable: message in /example.php on line 6 NULL string(5) "привет" string(5) "привет" string(5) "привет" string(5) "мир" string(11) "привет мир"
Наследование переменных из
родительской области видимости не то же
самое, что использование глобальных переменных.
Глобальные переменные существуют в глобальной области видимости,
которая не меняется, вне зависимости от того, какая функция
выполняется в данный момент. Родительская область видимости
— это функция, в которой было объявлено замыкание (не обязательно
та же самая, из которой оно было вызвано). Смотрите следующий
пример:
Пример #4 Замыкания и область видимости
Пример #5 Автоматическое связывание $this
Результат выполнения данного примера:
object(Test)#1 (0) { }
Результат выполнения данного примера в PHP 5.3:
Notice: Undefined variable: this in script.php on line 8 NULL
Начиная с PHP 5.4.0, при объявлении в контексте класса, текущий
класс будет автоматически связан с ним, делая $this
доступным внутри функций класса. Если вы не хотите автоматического
связывания с текущим классом, используйте .
Статические анонимные функции
Начиная с PHP 5.4, анонимные функции могут быть объявлены статически.
Это предотвратит их автоматическое связывание с текущим классом.
Объекты также не будут с ними связаны во время выполнения.
Пример #6 Попытка использовать $this в статической анонимной функции
Результат выполнения данного примера:
Notice: Undefined variable: this in %s on line %d NULL
Пример #7 Попытка связать объект со статической анонимной функцией
Результат выполнения данного примера:
Warning: Cannot bind an instance to a static closure in %s on line %d
Необязательные параметры (параметры по умолчанию) функции
У функции может иметься неограниченное количество аргументов (параметров), среди которых могут быть необязательные (в том числе и все). Для того, чтобы сделать аргумент функции необязательным, ему нужно присвоить значение по умолчанию при объявлении функции.
/** * Объявляем функцию со значениями по умолчанию */ function amount($value_1, $value_2, $value_3 = 0) { print $value_1 + $value_2 + $value_3; }
Теперь, если мы захотим подсчитать общее количество яблок, мы можем вызвать фукнцию как и в прошлый раз.
/** * Подсчитываем общее количество яблок * На этот раз функция amount() принимает три аргумента, * но третий является необязательным, так как его значение * было определено при объявлении функции, если мы третий * аргумент не укажем, он останется равным нулю */ $geen_apples = 11; $red_apples = 7; amount($green_apples, $red_apples); // Выведет на экран 18 // Находим у себя в кладовой, внезапно, ещё 10 желтых яблок $yellow_apples = 10; // И их тоже нужно учесть amount($green_apples, $red_apples, $yellow_apples); // Выведет на экран 28
Обратите внимание на то, что мы дважды вызвали одну и ту же функцию в пределах одного сценария. Это можно делать сколь угодно много раз
При работе с функциями помните об одной немаловажной детали — если среди аргументов функции присутствуют необъявленные по умолчанию и объявленные, сначала должны быть указаны те, которые являются необъявленными (обязательными)
function userF($v1, $v2 = 100, $v3) { // К хорошему не приведет print $v1 + $v2 + $v3; }
Возможности functions.php
functions.php располагается в папке темы и загружается каждый раз, во время просмотра внешней части сайта, в админ-панели и даже во время AJAX запросов. Нет случая, когда functions.php не будет подключен и это открывает широкие возможности перед разработчиками.
Для примера, следующий код, вставленный в файл темы functions.php расширит возможности темы — включит поддержку миниатюр поста:
add_action( 'after_setup_theme', 'wp_kama_theme_setup' ); function wp_kama_theme_setup(){ // Поддержка миниатюр add_theme_support( 'post-thumbnails' ); }
Другой пример, код заменит текст в подвале админ-панели WordPress, на данные о количестве запросов к базе данных, времени генерации страницы и использовании памяти:
## Данные о количестве запросов к базе данных в подвале админки add_filter( 'admin_footer_text', 'wp_usage' ); // в админке add_filter( 'wp_footer', 'wp_usage' ); // на сайте function wp_usage(){ echo sprintf( __( 'SQL: %d за %s сек. %s MB', 'km' ), get_num_queries(), timer_stop( 0, 3 ), round( memory_get_peak_usage()/1024/1024, 2 ) ); }
Какими особенностями обладают пользовательские функции в PHP?
В PHP выделяют следующие особенности пользовательских функций:
— доступность параметров по умолчанию. Вы можете вызывать одну и ту же функцию в PHP с переменным числом параметров;
— область видимости переменных внутри пользовательской функции является древовидной (иерархической);
— пользовательские функции способны возвращать любой тип;
— присутствует возможность менять переменные, которые переданы в качестве аргумента.
В языке PHP у разработчика есть достаточно много свободы при создании пользовательских функций. При этом, как уже было сказано, в пользовательских PHP-функциях доступны параметры по умолчанию, в отличие от того же C++.
Вложенные функции
Вложенная функция – это функция, объявленная внутри другой функции. Пример:
<?php /*Здесь нельзя вызвать sayGoodbye, так как она появится только после вызова функции sayHi*/ sayHi(); /*вызвали функцию sayHi, её можно вызывать в любом месте*/ /*Теперь можем вызывать sayGoodbye*/ sayGoodbye(); function sayHi(){ echo 'Всем привет! <br>'; function sayGoodbye(){ echo 'Всем пока! <br>'; } }
Опять-таки, при первом обходе интерпретатор PHP помечает себе, что он нашёл описание функции sayHi, но не заходит внутрь её тела, он видит только название, а раз интерпретатор не заходит внутрь тела sayHi, то он понятия не имеет, что внутри мы определяем ещё одну функцию – sayGoodbye.
Далее код начинает исполняться, мы вызываем sayHi, интерпретатору PHP приходиться зайти в тело функции sayHi, чтобы выполнить её и там он случайно находит описание ещё одной функции — sayGoodbye, после чего и sayGoodbye можно вызывать в любом месте, сколько угодно раз.
Но стоит обратить внимание на очень тонкий момент в ситуации выше: функция sayHi становится одноразовой, потому что если мы ещё раз её вызовем, то PHP опять наткнётся на определение функции sayGoodbye, а в PHP так делать нельзя – нельзя переопределять функции. Об этом и о том, как с этим бороться я писал в предыдущей статье
В PHP описанные выше приёмы применяются очень редко, чаще их можно увидеть, например, в JavaScript.
Создание Closure с анонимной функцией
Давайте рассмотрим такой приме:
<?php class Test { public static function doSomething($num, $closure = null) { if( !$closure instanceof \Closure ) { return $num; } if( ($value = call_user_func($closure, $num)) && is_int($value) ) { return $value * $num; } return $num; } } $t = new Test(); var_dump($t->doSomething(10, function($passedNum) { return $passedNum * 5; }));
Вывод:
int(500)
Объяснение
Я создал новый класс , который включает в себя один метод с двуми передаваемым параметрами: , . Второй параметр не обязательный.
Логика следующая:
- если не является , тогда мы возвращаем
- если является , тогда мы вызывает ее используя и как параметр функции вызывает саму и передаем обратно , чтобы тот, кто используем метод, мог воспользоваться числом (если потребуется). Далее проверяем, что вернулась цифра (потому что это то, что я ожидаю), если все ок, тогда умножаем на , которое вернулось из
- в ином случае возвращаем
Создания функции в PHP:
В PHP объявление функции очень простое, вам просто надо написать слово , после него название функции, круглы скобки, фигурные скобки и уже в них писать код.
Вызвать её тоже очень просто, пишем название функции и круглые скобки.
PHP
1 2 3 4 5 6 7 |
// Объявление (создание) функции с названием hello_world functionhello_world(){ echo’Hello World</br>’; } hello_world(); |
Как видите всё очень просто, вот что она выводит.
Также, если мы её визовым несколько раз, то получим несколько предложений «Hello World».
PHP
1 2 3 4 5 6 7 8 9 |
// Объявление функции с названием hello_world functionhello_world(){ echo’Hello World</br>’; } hello_world(); hello_world(); hello_world(); |
Вот как то так.
Как видите это достаточно удобно и просто.
Параметры в функции:
Также в PHP есть передача параметров в функции, это очень полезно, к примеру когда вам нужно сравнить два числа, вы просто передаёте эти числа в функцию и она уже сравнивает.
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Объявление функции с названием num_top functionnum_top($a,$b){ if($a>$b){ echo’$a > $b, $a = ‘.$a.'</br>’; }elseif($a<$b){ echo’$a < $b, $b = ‘.$b.'</br>’; }else{ echo’$a = $b, $b и $a = ‘.$a.'</br>’; } } num_top(3,1);// параметр $a = 3, параметр $b = 1 num_top(2,9);// параметр $a = 2, параметр $b = 9 num_top(5,5);// параметр $a = 5, параметр $b = 5 |
Вот результат.
Также в качестве параметра можно передавать переменную, при чём, вообще без разницы какую, тут всё зависит от того, что вам нужно делать в функции, можно даже передавать массивы.
Возврат значения в функции:
Также функция может возвращать разные значения, это нужно, к примеру, если нам не надо, чтобы функция выводила на экран, какое значение больше, а только давала нам это значение, для дальнейшей работы с ним.
Для этого, внутри функции используется ключевое слово .
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Объявление функции с названием num_top functionnum_top($a,$b){ if($a>=$b){ // Возвращает $a, если $a больше или равно $b return$a; }elseif($a<$b){ // Возвращает $b, если $a меньше $b return$b; } } $a=num_top(3,1);// Переменная $a равна 3 $b=num_top(5,10);// Переменная $a равна 10 echo’$a = ‘.$a.’, $b = ‘.$b.'</br>’; // Складываем их и выводим на экран echo$a+$b; |
Вот результат.
Как видите всё работает, сначала сравниваем три и один, получается три больше чем один, число возвращается и присваивается переменной , точно также с переменной , после этого складываем эти две переменный и получается 13.
Ещё в PHP можно передать функцию как параметр, это иногда бывает полезно, что бы не создавать отдельную переменную.
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Объявление функции с названием num_top functionnum_top($a,$b){ if($a>=$b){ // Возвращает $a, если $a больше или равно $b return$a; }elseif($a<$b){ // Возвращает $b, если $a меньше $b return$b; } } echonum_top(num_top(3,2),num_top(1,4));// Выведет 4 |
Как видите всё просто, это пожалуй всё основное что нужно знать о функциях, единственное, примеры были достаточно однообразны.
Заключение
Конечно же, при разработке используется ещё большое множество других встроенных функций PHP, однако функции, которые я перечислил выше, скорее всего, понадобятся вам в первую очередь. Учить наизусть их не нужно, вполне достаточно просто знать об их существовании и при необходимости уметь быстро найти информацию о том, как их использовать. В ходе постоянной практики вы автоматически их запомните.
Пожалуйста, оцените эту статью
Средняя оценка: 4.9 из 5 (проголосовало: 29)