Что нужно знать о функциях в 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;
}
?>

В результате получим ту же программу, что и раньше, но работать с ее кодом будет удобнее.

Вот и все что касается функций. Успешных вам экспериментов.





Читайте также:



2 Ответов на “Что нужно знать о функциях в php”

  1. Include funcs.php такая запись весьма уязвима с точки зрения безопасности.

  2. почему уязвима? и как писать.


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map