Что нужно знать о функциях в php
Во время написания больших скриптов на php (что не редкость как я понял), возникает проблема удобочитаемости – раз, и частого повторения некоторых рутинных действий – два. Для решения этих проблем, как и в любом другом структурном языке, в php предусмотрены функции.
Вот на днях и я, наконец, решил подойти к этому вопросу.
Синтаксис описания функций здесь в общем виде такой:
function myfunc($a, $b) {
// тело функции
}
?>
Вызывается очень просто:
myfunc($a, $b);
Число параметров при описании и вызове должно совпадать в этом случае. Но в php есть возможность задавать некоторые параметры для функций по умолчанию.
Например:
function myfunc($a, $b = 12){
// тело функции
}
?>
Т.е. если мы вызовем эту функцию так:
myfunc(11);
то внутри нее параметры будут такими:
$a = 11, $b = 12;
Для неуказанных параметров значению берутся те, которые указаны по умолчанию.
Вышеуказанный пример точнее будет назвать не функцией, а скорее процедурой (руководствуясь терминами паскаля). Так как она ничего не возвращает. А вот если вы хотите, чтобы результатом выполнения функции была какая-то переменная, то нужно использовать слово return в месте, где будет происходить выход из функции.
Например:
function sum($a, $b) {
$tmp = $a+$b;
return $tmp;
}
?>
Тогда в программе можно сделать следующее:
$a = 11;
$b = 12;
$sum = sum($a, $b);
echo $sum;
?>
Будет выведено:
23
По умолчанию функция работает с копией параметров, которые ей передают. Другими словами если вы передали функции $a = 12, а внутри функции изменили его на 13. То после выполнения функции в основной программе $a будет равно 12, потому что функция создала внутри себя копию этой переменной и вы работали с ней, а не с настоящей.
А чтобы можно было изменять внутри функции параметры можно пойти двумя путями:
Первый – передать в функцию параметр особым способом (по ссылке), а второй – использовать внутри функции обращение к глобальной переменной.
Рассмотрим оба способа на примере:
$a = 10;
$b = 10;
Inc_a($a, $b);
Echo $a.”<br>”;
Echo $b;
function inc_a($c, &$d) {
$c = $c+1;
$d = $d+1;
}
?>
Выведет:
10
11
Второй параметр изменился внутри функции потому, что функция работала не с его копией, а с ним самим (т.к. он был передан по ссылке).
$a = 10;
Inc_a();
Echo $a;
function inc_a() {
global $a;
$a=$a+1;
}
?>
Здесь мы не передаем функции параметры, а просто указываем ей, что в программе есть переменная с именем $a, которую нужно изменить (global $a).
Если вы будете писать большую программу, где будете использовать много функций, то будет очень неудобно хранить их в том же файле, что и код основной программы. Для того, чтобы избежать этого функции и другой код в php можно выносить в другие файлы, которые потом включать в основной скрипт.
Пусть основной файл будет называться main.php:
Include “funcs.php”;
$a = 10;
Inc_a($a, $b);
Echo $a;
?>
А файл с функцией funcs.php:
function inc_a() {
global $a;
$a=$a+1;
}
?>
В результате получим ту же программу, что и раньше, но работать с ее кодом будет удобнее.
Вот и все что касается функций. Успешных вам экспериментов.
Include funcs.php такая запись весьма уязвима с точки зрения безопасности.
почему уязвима? и как писать.