Функции служат для выделения кода, который выполняет отдельную, хорошо определенную задачу. Это упрощает чтение кода и позволяет его использовать всякий раз, когда нужно выполнить эту задачу.
Под функцией понимают независимый модуль кода, который устанавливает интерфейс вызова, выполняет определенную задачу и при необходимости возвращает результат.
Следующая строка есть простейшее обращение к функции:
function_name ()
Она вызывает функцию с именем function_name, которая не требует параметров. Эта строка игнорирует любое значение, которое может возвратить эта функция.
Множество функций вызывается именно таким образом. Функция phpinfo () частично оказывается полезной во время тестирования, поскольку она показывает, какая версия РНР установлена, сообщает информацию о РНР, параметры установки веб-сервера, а также значения различных переменных РНР и сервера. Эта функция не принимает ни каких параметров, а мы в общем случае игнорируем значение, которое она возвращает. Поэтому вызов функции phpinfo () будет иметь следующий вид:
phpinfo ();
Большинство функций требует передачи им одного или большего числа параметров, т.е. информации, передаваемой в функцию во время ее вызова и влияющей на результат ее выполнения. Мы предаем ей параметры, помещая данные или имя переменной, которая содержит данные, в круглые скобки, следующие за именем функции. Обращение к функции с параметром принимает примерно такой вид:
function_name ('параметр ');
В этом случае используемым параметром является строка, содержащая слово параметр. Следующие вызовы также являются обращениями к функции, в зависимости от ожидаемого типа параметра:
function_name (2);
function_name (4.365);
function_name ($variable);
В последней строке переменная $variable может быть РНР-переменной любого типа, в том числе и массивом.
Параметр может быть данными любого типа, но конкретные функции обычно требуют передачи конкретных типов данных.
Количество принимаемых функций параметров, что каждый из них собою представляет, и какой тип данных он должен иметь, можно выяснить из протокола функции. При описании функции часто приводится ее прототип.
Вот так выглядит прототип функции fopen ():
resorce fopen (string filename, string mode [, bool use_include_path [, resource zcontext ] ] );
Прототип представляет собой описание функции, и очень важно, чтобы вы умели правильно интерпретировать его спецификации. В данном случае слово resorce перед именем функции указывает, что эта функция возвращает некоторый ресурс (здесь дескриптор открытого файла). Параметры функции заключаются в круглые скобки. В случае функции fopen () в прототипе указаны четыре параметра. Параметры filename (имя файла) и mode (режим) являются строками, параметр use_include_path — булевым значением, а параметр zcontext — ресурсом. Квадратные скобки вокруг use_include_path и zcontext показывают, что эти параметры являются необязательными. Для необязательных параметров можно передать значения, либо их можно игнорировать. В таких случаях используется значение, определенной по умолчанию. В тоже время, если функция принимает более одного необязательного параметра, опускать можно только саймый правый из них. Например, в случае fopen () опускать можно либо zcontext, либо use_include_path и zcontext, но нельзя оставить zcontext и опустить use_include_path.
После ознакомления с прототипом этой функции становится понятно, что в приведенном ниже фрагменте кода находится допустимый вызов fopen ():
$name = 'myfile.txt';
$openmode = 'r';
$fp = fopen ($name, $openmode)
Этот код вызывает функцию с именем fopen (). Возвращаемое функцией значение будет сохранено в переменной $fp. В функцию передается переменная $name, которая содержит строку, представляющую открываемый файл, и переменная $openmode, которая содержит строку, указывающую режим для этого файла. Пока мы не передаем функции необязательные третий и четвертый параметры.
При попытке вызвать несуществующую функцию вы получите сообщение об ошибке, как показано на рисунке.
Как правило, выводимые РНР сообщения об ошибках приносят большую пользу. Такое сообщение точно указывает имя и строку сценария, где была допущена ошибка, а также имя функции, которую вы пытались вызвать. Эта информация должна существенно упростить поиск и исправление ошибки.
Получив сообщение об ошибке, вы должны проверить два момента:
Не всегда легко запомнить, как правильно пишется название функции. Например, некоторые имена функций, состоящие из двух слов, содержат символ подчеркивания между словами, а некоторые нет. Так в имени функции striplashes () два слова ститы в одно, в то время как в имени функции strip_tags () они разделены символом подчеркивания. Неправильный ввод имени функции в вызове приводит к ошибке.
В каждой новой версии РНР появляются новые функции, и если вы работаете с одной из ранних версий РНР, то дополнительные функциональные возможности и более высокая производительность, характерные для новых версий, должны подтолкнуть к модернизации программного обеспечения. Если вы хотите выяснить, когда появилась та или иная функция, вы можете навести соответствующие справки в онлайновом руководстве. Попытка вызова функции, которая не объявлена в используемой вами версии, приведет к появлению сообщения об ошибке.
Еще одна причина получения упомянутого выше сообщения об ошибке связана с тем, что вызываемая функция является частью РНР-расширения, которое не загружено. Например, если вы пытаетесь воспользоваться функциями из библиотеки манипулирования изображениями gd, а она не была установлена, браузер выведет сообщение об ошибке.
Обратите внимание, что имена функций не чувствительны к регистру, поэтому любое из обращений function_name (), Function_Name (), FUNCTION_NAME () являются допустимыми и приводят к одному и тому же результату. Прописные буквы можно использовать в имени функции любым образом, который, по вашему мнению, облегчит чтение, но при этом всеже следует стремиться к какому то единообразию.
Важно отметить, что имена функций ведут себы иначе, чем имена переменных. Имена переменных чувствительны к регистру, и поэтому $name и $Name — это разные переменные, тогда как name () и Name () — одна и та же функция.