Кориснички дефинирани функции
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Кориснички дефинирани функции
Референца за `functions.user-defined.php` со подобрена типографија и навигација.
Кориснички дефинирани функции
Функцијата се дефинира со користење на function клучниот збор, име, список на параметри (кои може да бидат празни) разделени со запирки (, ) заокружен со загради, проследен со телото на функцијата заокружено со кадрави загради, како што е прикажано подолу:
Пример #1 Декларирање нова функција наречена foo
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Example function.\n";
return $retval;
}
?>Забелешка:
Од PHP 8.0.0, списокот на параметри може да има последна запирка:
<?php
function foo($arg_1, $arg_2,) { }
?>
Било кој валиден PHP код може да се појави во телото на функцијата, дури и други функции и class definitions.
Имињата на функциите ги следат истите правила како и другите ознаки во PHP. Валидното име на функција започнува со буква или подвлекување, проследено со кој било број букви, броеви или подвлекувања. Како регуларен израз, тоа би било изразено вака:
^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.
Погледнете исто така Водич за именување во корисничкиот простор.
Функциите не мора да бидат дефинирани пред да бидат повикани, except кога функцијата е условно дефинирана како што е прикажано во двата примери подолу.
Кога функцијата е дефинирана на условен начин како што се прикажани двата примери. Нејзината дефиниција мора да биде обработена prior пред да биде повикана.
Пример #2 Условни функции
<?php
$makefoo = true;
/* We can't call foo() from here
since it doesn't exist yet,
but we can call bar() */
bar();
if ($makefoo) {
function foo()
{
echo "I don't exist until program execution reaches me.\n";
}
}
/* Now we can safely call foo()
since $makefoo evaluated to true */
if ($makefoo) foo();
function bar()
{
echo "I exist immediately upon program start.\n";
}
?>
Пример #3 Функции во функции
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.\n";
}
}
/* We can't call bar() yet
since it doesn't exist. */
foo();
/* Now we can call bar(),
foo()'s processing has
made it accessible. */
bar();
?>Сите функции и класи во PHP имаат глобален опсег - тие можат да бидат повикани надвор од функција дури и ако биле дефинирани внатре и обратно.
PHP не поддржува преоптоварување на функции, ниту е можно да се поништи или повторно дефинираат претходно декларирани функции.
Забелешка: Имињата на функциите не прават разлика помеѓу големи и мали букви за ASCII знаците
AtoZ, иако обично е добра форма да се повикуваат функциите како што се појавуваат во нивната декларација.
И двете променлив број на аргументи and основни аргументи се поддржани во функциите. Погледнете ги и референците за функции за func_num_args(), func_get_arg()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во func_get_args() Користење на PHP од командната линија
Можно е да се повикуваат рекурзивни функции во PHP.
Пример #4 Рекурзивни функции
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>Забелешка: Рекурзивните повици на функции/методи со над 100-200 нивоа на рекурзија може да го преполнат стекот и да предизвикаат прекин на тековниот скрипт. Особено, бесконечната рекурзија се смета за програмска грешка.