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

В каждом языке программирования работа с функциями имеет свои «тонкости». Рассмотрим их особенности в php:
- Определение функции выглядит следующим образом:
function имя_функции (параметры)
{
//тело функции
}
Параметры могут быть пустыми. Имя указывается после обязательного слова function. При этом имена функций являются независимыми от регистра.
Это значит, что при объявлении function Main() и function main() подразумевается одна и та же функция. А при вызове одной из них интерпретатор выдаст сообщение об ошибке:

- В теле функции может находиться любой код. В том числе и определение другой функции. При этом определение может быть расположено в любом месте кода. То есть, в php имеет значение лишь расположение вызова функции;
- Функция может возвращать лишь одно значение, или ничего. Возврат более одного значения не возможен. При этом тип возвращаемого значения может быть любым.
Пример:
function MyFunc () {
$a=1;
return $a;
}
echo MyFunc ();
В результате будет возвращена 1.
Множественную передачу значений можно осуществить при использовании в php массива в функции.
Пример:
function asq($a){
$x=$a*$a;
$y=$a*$a*$a;
return array($x,$y);
}
list($kvd,$kub)=$asq(15);
В теле функции задаются значения переменным x и y. Затем с помощью встроенной функции array() они записываются в массив.
Значение элементам массива задается при вызове функции с помощь list().
- Вызов функции php имеет синтаксис:
имя_функции(аргумент 1, аргумент 2…аргумент n);
Пример:
function MyFunc ($a,$b,$c=0){
$a=$b+$c;
return $a;
}
echo MyFunc (0,1,2);
Функция вернет 3.

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

Анонимной называется функция, определение которой происходит без указания имени. То есть ее определение происходит в месте вызова. При создании анонимной функции к ней обращаются напрямую, или переменной присваивается ссылка на нее.
Рассмотрим на примерах:
$func1 = function(){
return 1;
};
$x = $func1();
echo $x();
Здесь ссылка на анонимную функцию присваивается переменной func1. Затем переменная x инициализируется значением func1 и выводится с помощью echo():
$input = array(1, 2, 3, 4, 5);
$output = array_filter($input, function ($v) { return $v > 2; });
В примере автономная функция function ($v) { return $v > 2; } вызывается напрямую в месте определения. Она передается в качестве второго аргумента стандартной функции array_filter().
Функция mail()
Набор стандартных (встроенных) функций в php довольно широк. Многие из них реализуют основные возможности веб-сферы.
Одной из таких является функция mail(). Она отправляет сообщение на указанный почтовый ящик. Ее синтаксис:
[bool mail (string to, string subject, string message [, string additional_headers [, string additional_parameters]])
Описание принимаемых параметров:
- to –адрес получателя письма. Должен соответствовать стандарту user@example.com;
- subject – тема письма;
- message – отправляемое сообщение. При этом каждая строка сообщения должна вмещать в себя не более 70 символов. Строки разделяются символом перевода строки (n).
Если отправка письма происходит непосредственно на SMTP-сервер с машины на основе Windows, то все точки в конце каждой строки будут удалены. Во избежание этого следует заменить все одиночные точки на двойные с помощью кода:
$text = str_replace("n.", "n..", $text);
Необязательные параметры функции mail():
- additional_headers – вставляется в конце заголовков отправляемого письма. Используется для добавления заголовков.
Пример отправки простого письма:
$message = "Line 1nLine 2nLine 3";
$message = wordwrap($message, 70);
mail('caffeinated@example.com', 'My Subject', $message);
А вот пример полностью рабочей формы для отправки сообщений:

Вот ее код php:
<?php
$msg_box = ""; // в этой переменной будем хранить сообщения формы
if($_POST['btn_submit']){
$errors = array(); // контейнер для ошибок
// проверяем корректность полей
if($_POST['user_name'] == "") $errors[] = "Поле 'Ваше имя' не заполнено!";
if($_POST['user_email'] == "") $errors[] = "Поле 'Ваш e-mail' не заполнено!";
if($_POST['text_comment'] == "") $errors[] = "Поле 'Текст сообщения' не заполнено!";
// если форма без ошибок
if(empty($errors)){
// собираем данные из формы
$message = "Имя пользователя: " . $_POST['user_name'] . "<br/>";
$message .= "E-mail пользователя: " . $_POST['user_email'] . "<br/>";
$message .= "Текст письма: " . $_POST['text_comment'];
send_mail($message); // отправим письмо
// выведем сообщение об успехе
$msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>";
}else{
// если были ошибки, то выводим их
$msg_box = "";
foreach($errors as $one_error){
$msg_box .= "<span style='color: red;'>$one_error</span><br/>";
}
}
}
// функция отправки письма
function send_mail($message){
// почта, на которую придет письмо
$mail_to = "my@mail.ru";
// тема письма
$subject = "Письмо с обратной связи";
// заголовок письма
$headers= "MIME-Version: 1.0rn";
$headers .= "Content-type: text/html; charset=utf-8rn"; // кодировка письма
$headers .= "From: Тестовое письмо <no-reply@test.com>rn"; // от кого письмо
// отправляем письмо
mail($mail_to, $subject, $message, $headers);
}
Код html:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Обратная связь</title>
</head>
<body>
<br/>
<?= $msg_box; // вывод сообщений ?>
<br/>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" name="frm_feedback">
<label>Ваше имя:</label><br/>
<input type="text" name="user_name" value="<?=($_POST['user_name']) ? $_POST['user_name'] : ""; // сохраняем то, что вводили?>" /><br/>
<label>Ваш e-mail:</label><br/>
<input type="text" name="user_email" value="<?=($_POST['user_email']) ? $_POST['user_email'] : ""; // сохраняем то, что вводили?>" /><br/>
<label>Текст сообщения:</label><br/>
<textarea name="text_comment"><?=($_POST['text_comment']) ? $_POST['text_comment'] : ""; // сохраняем то, что вводили?></textarea>
<br/>
<input type="submit" value="Отправить" name="btn_submit" />
</form>
</body>
</html>
Несколько основных причин, почему письмо не отправляется:
- Письмо не содержит дополнительного заголовка From. Он устанавливается с помощью необязательного параметра additional_headers. Также он может быть выключен по умолчанию в конфигурационном файле php.ini. Если заголовок отсутствует в коде, то интерпретатор выдаст следующее сообщение:
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing
- Используйте только LF (n). Некоторые агенты на основе Unix автоматические заменяют LF на CRLF (rn);
- При реализации функции mail() на Windows адрес получателя не должен быть такого вида: Something someone@example.com.
Может произойти неправильная интерпретация параметра при передаче его почтовому агенту для отправки.
- Сбои в отправке писем могут возникнуть при размещении вызова mail() в теле цикла. Функция открывает и закрывает соединение с SMTP-сервером после отправки каждого письма.
Обзор стандартных функций php
В стандартный набор php входит большой комплект функций для работы со строками. Подробно рассмотрим несколько из них:
- 1) substr() – возвращает часть строки. Синтаксис: string substr(string string, int start[, int length]), где:
- string string – заданная строка.
- int start – задает начало подстроки.
- int length – количество символов в возвращаемой подстроке.
Пример:
$string = substr("Hello, world!", 6);
echo ($string);
- 2) strpos() – возвращает позицию подстроки в заданной строке. С помощью необязательного параметра можно задать точку отсчета для поиска. Синтаксис: string strpos(string haystack, string needle[, int offset])
Пример:
$string = strpos("Hello, world!", "world");
echo($string);
3) strstr() – возвращает подстроку из строки, начиная с указанного символа. Синтаксис: string
strstr(string haystack, string needle)
Пример:
$url = "http://www.mail.ru";
$www = strstr($url,"m");
echo ($www);

Функции работы с массивами:
1. count() – возвращает количество элементов в массиве. Синтаксис: int count(mixed var)
Пример:
$a=array("Volvo","Kia","Ford");
echo count($a);
2. reset() – устанавливает указатель массива на первый элемент, возвращает его значение.
Синтаксис: reset(array array)
Пример:
$b=array("1","2","3");
echo reset($b)."</br>";
3. sort() – сортирует массив по возрастанию. Функция воспринимает любой массив как список. Синтаксис: void sort(array array [, int sort_flags])
Пример:
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "n";
}

В языке PHP существует много функций для работы с датой и временем. Но функция date () в php является основной. Она возвращает строку, отформатированную согласно установленному шаблону format. Временная метка устанавливается аргументом timestamp. Ее синтаксис: string date ( string $format [, int $timestamp = time() ] )
Пример:
echo date('l jS of F Y h:i:s A');
Более подробно обо всех принимаемых значениях аргументов функции можно узнать из документации к php.

Несколько стандартных математических функций:
1. bindec() – преобразует число двоичной системы исчисления в десятичное. Синтаксис: bindec ( string $binary_string )
Пример:
echo bindec('11001') . "<br/>";
2. floor() – округляет число до меньшего. Синтаксис: float floor (float $value )
Пример:
echo floor(4.3). "<br/>";
3. rand() –генерирует случайное число из указанного диапазона. Синтаксис: int rand ( int $min , int $max )
Пример:
echo rand(5, 1500);

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