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

Значение функций для программирования неоценимо. Благодаря им появилась возможность повторного использования кода. Нужно лишь разместить вызов функции в конкретном месте программы, и передать ей новые значения аргументов. Не являются исключением из правил и функции 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.

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

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

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

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

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

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

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

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

$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);

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

ознакомиться в документации по языку

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

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 всего лишь ложка меда из огромной бочки волшебства этого языка. Самые вкусные функции распробуйте самостоятельно.