Обучение в PHP - част 6 (Функции)

ФУНКЦИИ

Запознаване с функциите

Функцията е самостоятелен и независим блок от кода, който извършва да дена задача. Обикновенно, задачата трябва да се изпълнява повече от един път. Тъй като функцията е самостоятелен блок, който може да работи независимо, не е необходимо тя да е част от даден скрипт. Това означава, че функцията може да бъде част от самиия скрипт или част от външна библиотека. Ако функцията е част от даден скрипт, кодът във функцията не се изпълнява, докато тя не бъде извикана.

Главните предимства за използването на функции са:

Опростяване на кода.Функциите правят кода много лесен за разбиране. Вместо във скрипта да се повтаря даден код, където се налага да се извърши дадена задача, кодът се задава като функция и тя се извиква, където е необходимо. Като резултат, функциите намаляват размера на скриптовете ви.
Преизползваемост на кода.След като е написана функцията, може да бъде използвана не само от скрипта, в който е създадена, но и то други скриптове. Това ви позволява да спестите дублирането на функционалност в различните скриптове.
Последната и най-добра възможност на PHP 4 е, че не е необходимо да дефинирате функцията, преди да я извикате. Казано по-просто, можете да извикате функцията в скрипта, и по-късно да я дефинирате.
Ако сте дефинирали функцията, не можете да я предефинирате или премахнете. Това е така, защото в PHP не се потдържа предефиниране на функции. Така че всяка ваша функция трябва да има уникално име.
PHP 4 не потдържа функции с неопределен брой аргументи.
PHP 4 подържа аргументи по подразбиране


Типове функции

PHP предлага два типа функции, а именно:

Вградени функции
Функции, дефинирани от потребителя


Вградени функции

Вградените функции са предварително ддефинирани функции, които се предоставят от PHP. Има стотици вградени функции, които можете да използвате. Някой от най-често използваните вградени функции в PHP, с които вече се запознахте по-рано, са count(), echo(), array_diff() и др. За разлика от вградените функции,функциите, дефинирани от потребителя, зависят изжяло от програмиста на конкретния скрипт.

Функции, дефинирани от потребителя

Функциите, дефинирани от потребителя, не се предлагат стандартно в PHP. Вместо това те се задават от програмиста, тоест от вас. След като ги създадете, вие имате пълен контрол над тях. Като резултат, можете да създадете функции, адаптирани към конкретните ви изисквания, и заради това този вид функции са много популярни сред програмистите.

Как можете да създадете своя функция в PHP?

Деклариране на функции

Синтаксисът, който се използва в PHP, e аналогичен на синтаксисът в другите програмни езици. Ето го и синтаксисът, чрез който можете да декларирате функции в PHP:

]function име_на_функцията($аргумент1, $аргумент2,....,$аргумент_n)
{
// оператори
}


В горния синтакссис:

function е ключова дума за деклариране на функции.
Име_на_функция е името насъздаваната функция. Това ще бъде името, с което по-късно ще я извикате. Името на функцията трябва да е уникално, защото в PHP не се потдържа предеклариране на функции. Когато избирате име на функцията, трябва да спазвате правилата за задаване на име на променливата. Обаче името на функцията не може да започва със символа $, въпреки, че за променливите е допустимо.
Аргумент_n е стойността, която предавате на функцията. както можете да видите от горния синтаксис, една функция може да има множество аргументи, разделени със запетаи. Аргументите не са задължителни. При извикване на функцията, може да не й определяте аргумент.
Оператори е множество от оператори, които се изпълняват при извикване на функцията. Чрез тези оператори се намира резултатът от функцията. Ако операторите са повече от един, трябва да са заградени във фигурни скоби ({}). Но скобите не са необходими, ако операторът е само един.


На базата на горния синтаксис, ще видите, как може да създадавате прости функции без аргументи

Функции без аргументи

Ето един пример за проста функция без аргументи

<?php

function no_arg // Деклариране на функцията с име no_arg
{
//Кодът на функцията
echo "Hello";
}
echo "The funtion has not been called yet";
no_arg(); // Извикване на функцията от главния скрипт
echo "The function has been called";

?>


В горния пример е декларирана функцията no_arg. Tъй като не са зададени аргументи след името на функцията, no_arg е функция без параметри. Когато функцията се извика чрез реда no_arg(), на екрана се появява съобщението "Hello". Резултатът от изпълнението е показан по-долу:


______________________________________
| |
|The funtion has not been called yet |
|Hello |
|The function has been called |
|____________________________________ |


Предаване на аргументи на функция

В PHP аргументите могат да се предават на функциите по следните три начина

Предаване на стойности по подразбиране
Предавне на аргументи по стойности
Предаване на аргументи по псевдоним


Предаване на стойнисти по подразбиране

При този метод, функцията трябва да приеме аргумент при извикването си. Ако обаче не се предаде стойност при извикването, на аргумента се присвоява такава по подразбиране. Ето пример за функция, имаща аргументи по подразбиране:

<?php

function counter ( $number = 6 ) // Деклариране на функцията counter
{
for(; $number < 10; $number++)
{
echo $number;
}
}
echo "The function has not been called yet.";
// Извикване на функцията със стойност 8 за аргумента на функцията
counter(8);
// Извикване на функцията без аргумент със стойност по подразбиране 6
counter();
echo "The function has been called yet !";

?>


В горния код функцията counter приема аргумент number, който има стойност по подразбиране 6. КОгато функцията се извика и й се предава стойност (counter(Cool, стойноста по подразбиране на аргумента не се взема предвид. От друга страна, когато функцията се извика без аргумент (counter()), тя взема стойноста по подразбиране на аргумента и изпълнява тялото си.

Предаване на аргументи по стойност

Това е най-често използваният начин за предаване на стойности към функциите в PHP. При този метод стойноста трябва да се предаде на функцията по време на извикването й от главната програма. Ето пример за функция, която приема аргументите си при извикване:

<?php

function counter( $number ) // Деклариране на функцията counter
// която изисква да бъде подадена стойност на аргумента number
{
for (; $number < 10; $number++)
{
echo $number ;
}
}
echo "The function has not been called yet.";
// Извикване на функцията и предаване на стойноста 3 на аргумента
counter(3);
echo "The function has been called.";

?>


В горния пример се декларира функция с име counter, която приема аргумент с име number. когато извикате тази функция, трябва да предадете стойност на аргумента на функцията. В противен случай PHP ще изведе съобщение за грешка. Когато функцията се извика от главния скрипт (counter(3)), й се предава стойност 3 за аргумента number.

Предаване на аргумент по псевдоним

<?

function called_function ( $number ) // Деклариране на функция, която
// изисква да бъде подадена стойност на аргумента number
{
$number = $number + 1;
echo $number;
}
// Извикване на функцията и предаване на num като аргумент
called_function ( $num );
echo $num;

?>

В този пример стойноста на променливата num се предава на функцията called_function и се съхранява в локалната за called_function променлива с име number. Стойността, предадена на функцията, се увеличава с единица и се визуакизира. След това констролът се връща на главният скрипт и се визуализира оригиналната стойност на променливата. Това означава, че въпреки променливата num да е била предадена на друга функция, нейната стойност остава непроменена в главнят скрипт.


Понякога, например в скрипта за сложни изчисления, може да искате даден параметър да се предаде на функцията и в извикващият скрипт да се върне променената стойност. Както видяхте в горния пример, това не е възможно, ако предавате аргумента по стойност. Обаче, чрез предаването на аргумента по псевдоним можете да позволите на извикващата функция да позволи стойноста на предадения й аргумент. Аргументите се предават по псевдоним, като се появи знакът & преди аргументаРазгледайте следващия пример. Той е почти същия като горния. Тук, обаче, аргументът се предава по псевдоним, вместо по стойност.

<?

$num = 10;
function called_function ( $number ) // Деклариране на функция, която
// изисква да бъде подадена стойност на аргумента number
{
$number = $number + 1;
echo $number;
}

called_function ( &$num ); // Извикване на функцията и предаване на num
echo $num;

?>


В горния пример аргументът num се предава по псевдоним. Т.е вместо копие, на функцията се предава адресът в паметта на аргумента. Като резултат, променливата num бива променена от функцията called_function.

Връщане на стойност от функция

Функциите също могат да връщат стойности към извикващият ги скрипт. В PHP, както и в повечето програмни езици( например С++ ), операторът return се използва за връщане на стойността на променлива в извикващият скрипт. Разгледайте следващият пример:

<?php

function sum ( $num1, $num2) // Деклариране на функция с име sum
{
$result = $num1 + $num2;
return $result;
}
echo sum (233, 19);

?>


В горният код се декларира функция с име sum. Тази функция, която може да се предположи от името й, изчислява сумата на двата си аргумента. Променливата result във функцията се използва за съхраняване на тази сума. С помоща на оператора return резултатът от изчислението се връща в извикващият скрипт и се визуализира на екрана.

Област на действие на променлива във функция

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

Да разгледаме следващият пример

<?php

function sum() // Деклариране на функцията sum
{
$result = 117 + 28;
}
echo $result;

?>


В горния пример няма нищо да се изведе на екрана! Можете ли да се досетите защо? Променливата result е декларирана във функцията sum. По тази причина, областта й на действие е ограничена само до тялото на функцията. По-просто казано, тя може да се използва само във функцията и остава недостъпна в частите от скрипта извън нея. Когато променливата result се използва извън функцията, тя се разглежда като нова променлива, чиято стойност още не е била зададена.

Въпреки че областта на действие на променлива ограничава достъпността й извън конкретната функция, вие можете да осъществите достъп до променлива, дефинирана във функцията. За тази цел PHP предоставя две ключови думи - global и static.

Ключовата дума global

Ключовата дума global ви позволява да осъществите достъп до променлива, декларирана във функция, от всяко място във скрипта ви. За тази цел при декларирането на променливата трябва да използвате ключовата дума global по следния начин:

global $променлива_1;

Ето как трябва да се промени предишния пример, за да бъде променливата result достъпна в главния скрипт.


<?php

function sum() // Деклариране на функцията sum
{
global $result;
$result = 117 + 28;
}
$result = 0;
echo $result;

?>


В горния пример, изведеният текст няма да бъде празен. И двата оператора echo ще изведът на екрана стойност 0, защото сега променливата result е глобална променлива и е достъпна от всяко място в скрипта.

Ключовата дума static "увеличава живота" на променливите и се различава от ключовата дума global

Ключовата дума static

Животът на променливата, декларирана във функцията, е много кратък. Това означава, че променливата във функцията се инициализира във началото на функцията и се унищожава при излизане от нея. Чрез използването на ключовата дума static можете да увеличавате живота на променливите, декларирани във функциите.

Да разгледаме следния пример:

<?php

function sum() // Деклариране на функцията sum()
{
$result = 1;
echo $result;
$result++;
}
sum();
sum();

?>


В горния пример функцията sum се извиква два пъти от главния скрипт. Резултатът е 1, 1.
Защо става така? Това е така, защото всеки път, когато извикате функцията, променливата result се инициализира отново, и резултатът от предишните събирания се губи. Но ако искате сумата да се натрупва, тогава можете да направите малка промяна в горния код, за да получите желания ефект. Преди декларацията на променливата result поставете ключовата дума static. Да разгледаме следния пример.

<?php

function sum() // Деклариране на функцията sum()
{
static $result = 1;
echo $result;
$result++;
}
sum();
sum();

?>


При изпълнението си горната програма ще изведе първо 1, след което на следващия ред 2, Това е така, защото променливата е декларирана като статична променлива и тя помни стойността си и след края на функцията.

Променливи функции и функции с променлив брой аргументи

Променливите функции са едни от най-добрите възможности на PHP. Ако добавите апострофи към името на променливата, PHP се опитва да намери функция със същото име и да я изпълни. Нека да разгледаме следния пример:

<?php

function pesho()
{
echo "My name is Pesho";
}
function noname ($name) // Функция изискваща аргумент
{
echo "My name is $name";
}
$show = 'pesho';
$show(); // Това е еквивалентно на реда pesho();
$show = 'noname';
$show(Dylgia); // Това е еквивалентно на реда noname('Dylgia')

?>


В горния пример има две функции pesho и noname. Функцията noname приема като параметър стойността Dylgia при извикването си от главния скрипт. В главния скрипт е декларирана променливата show. Както можете да видите, имената на функциите са присвоени, като стойност на тази променлива. Поради тази причина променливата show се нарича променлива функция.

PHP също така потдържа функции с променлив брой аргументи. Функцията с променлив брой аргументи е функция, при която броят на аргументите не е фиксиран.

Например:

<?php

showtitles($Itemcode 1);
showtitles($Itemcode 1, $Itemcode 2);
showtitles($Itemcode 1, $Itemcode 2, $Itemcode 3);

?>


PHP предоставя три функции за поддръжка на функциите с променлив брой аргументи:

func_num_args(): Връща броя на аргументите предадени на функцията.
func_get_arg(): Връща стойността на конкретния аргумент. Например, за да получите стойността на първия аргумент, предаден на функцията, можете да напишете $arg1 = func_get_arg(0).
func_get_args(): Връща всички аргументи , предадени на функцията под формата на масив.


/ Трябва да сте регистриран за да напишете коментар /