Rozdzia│ 12. Funkcje
Funkcje definiowane przez u┐ytkownika
Funkcja mo┐e byµ definiowana przy u┐yciu sk│adni:
function foo ($arg_1, $arg_2, ..., $arg_n) {
echo "Przyk│ad funkcji.\n";
return $retval;
}
Jakikolwiek prawid│owy kod jΩzyka PHP mo┐e byµ zawarty wewn▒trz funkcji, tak┐e inne funkcje oraz definicje klasy.
W php funkcje musza byµ zdefiniowane zanim okre╢lisz do nich referencje. Wymagania takie nie odnosz▒ siΩ do PHP4.
PHP nie wspiera funkcji prze│adowanych, nie jest tak┐e mo┐liwe skasowanie czy przedefiniowanie wcze╢niej zadeklarowanej funkcji.
php nie obs│uguje zmiennej liczy argument≤w funkcji, wspiera za╢ domy╢lne argumenty (wiΩcej informacji uzyskasz w sekcji Domy╢lne warto╢ci argument≤w). PHP4 wspiera zmienn▒ d│ugo╢µ listy argument≤w.
Argumenty funkcji
Dane mog▒ byµ przes│ane do funkcji poprzez listΩ argument≤w, kt≤re s▒ oddzielone od siebie przecinkami.
PHP wspiera przesy│anie argument≤w przez warto╢µ (domy╢lnie), przez referencjΩ oraz obs│uguje domy╢lne warto╢ci argument≤w. Zmiennej d│ugo╢ci listy argument≤w s▒ wspierane tylko w PHP4 i p≤╝niejszych.
Przekazywanie argument≤w przez referencjΩ
Domy╢lnie, argumenty funkcji s▒ przekazywane przez warto╢µ (wiΩc je┐eli zmienisz warto╢µ argumentu wewn▒trz funkcji, to zmiana ta nie dotyczy argumentu na zewn▒trz funkcji). Je┐eli chcesz umo┐liwiµ funkcji modyfikowanie jej argument≤w, musisz przekazaµ je do funkcji poprzez referencjΩ.
Je┐eli chcesz aby argumenty funkcji zawsze by│y przekazywane przez referencjΩ, poprzedziµ nazwΩ argumentu w nag│≤wku funkcji znakiem ampersandu (&):
function add_some_extra(&$string) {
$string .= 'i co╢ extra.';
}
$str = 'To jest │a±cuch, ';
add_some_extra($str);
echo $str; // wyrzuci 'To jest │a±cuch, i co╢ extra.'
Je┐eli chcesz przekazaµ zmienn▒ poprzez referencjΩ do funkcji, kt≤ra nie robi tego domy╢lnie, poprzed╝ znakiem ampersandu nazwΩ argumentu w wywo│aniu funkcji:
function foo ($bar) {
$bar .= ' i co╢ extra.';
}
$str = ' To jest │a±cuch, ';
foo ($str);
echo $str; // wyrzuci 'To jest │a±cuch, i co╢ extra.'
foo (&$str);
echo $str; // wyrzuci 'To jest │a±cuch, i co╢ extra.'
Domy╢lna warto╢ci argumentu
Funkcja mo┐e mieµ zdefiniowan▒ domy╢ln▒ warto╢µ dla argument≤w skalarnych:
function makecoffee ($type = "cappucino") {
return "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
Wynikiem powy┐szego zapisu jest :
Making a cup of cappucino.
Making a cup of espresso.
Domy╢lna warto╢µ musi byµ sta│▒, nie mo┐e byµ zmienn▒ lub metod▒ klasy.
W PHP 4.0 jest mo┐liwe okre╢lenie warto╢ci unset jako domy╢ln▒ warto╢µ argumentu. Oznacza to, ┐e argument nie bΩdzie okre╢lony dop≤ki nie zostanie dostarczona jaka╢ warto╢µ. Kiedy u┐ywasz domy╢lnych argument≤w, okre╢l je dopiero po argumentach niedomy╢lnych. Rozwa┐ poni┐szy fragment kodu:
function makeyogurt ($type = "acidophilus", $flavour) {
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt ("raspberry"); // nie pracuje prawid│owo
Wynikiem powy┐szego przyk│adu jest:
Warning: Missing argument 2 in call to makeyogurt()
in /usr/local/etc/httpd/htdocs/phptest/functest.html
on line 41
Making a bowl of raspberry .
Teraz por≤wnaj powy┐sze z tym co poni┐ej:
function makeyogurt ($flavour, $type = "acidophilus") {
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt ("raspberry"); // pracuje prawid│owo
Wynikiem tego przyk│adu jest:
Making a bowl of acidophilus raspberry.
Lista argument≤w o zmiennej d│ugo╢ci
PHP4 obs│uguje listy argument≤w o zmiennej d│ugo╢ci w funkcjach zdefiniowanych przez u┐ytkownika. S│u┐▒ temu funkcje: func_num_args(), kt≤ra zwraca liczbΩ argument≤w przes│anych do funkcji, func_get_arg(), kt≤ra zwraca element z listy argument≤w oraz func_get_args() zwracaj▒ca tablicΩ zawieraj▒c▒ listΩ agrument≤w funkcji.
Zwracane warto╢ci
Warto╢ci mog▒ byµ zwracane przy u┐yciu wyra┐enia return. Jakikolwiek typ mo┐e byµ zwr≤cony, w│▒cznie z listami i objektami.
function kwadrat ($num) {
return $num * $num;
}
echo kwadrat(4); // wyrzuci '16'.
Nie mo┐na zwracaµ wielu warto╢ci z funkcji, ale mo┐na zwracaµ tablicΩ warto╢ci.
function small_numbers() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
old_function
Wyra┐enie old_function pozwala deklarowaµ funkcjΩ u┐ywaj▒c sk│adni identycznej do tej z PHP/FI2 (przypuszczalnie musisz zast▒piµ 'function' wyra┐eniem 'old_function')
Wyra┐enia tego stosuj tylko dla konwersji PHP/FI2->php.
Ostrze┐enie |
Funkcje deklarowane jako old_function nie mog▒ byµ wywo│ywane z kodu PHP. Oznacza to, ┐e nie mo┐na u┐ywaµ ich w funkcjach takich jak usort(), array_walk() i register_shutdown_function(). Mo┐esz obej╢µ to ograniczenie poprzez napisanie funkcji os│onnej (w normalnej formie dla php) do wywo│ania old_function. |
Zmienna funkcji
PHP wspiera pojΩcie zmiennej funkcji. Oznacza to, ┐e je┐eli nazwa zmiennej posiada na ko±cu nawiasy to PHP bΩdzie szukaµ funkcji z identyczn▒ nazw▒ jak analizowana zmienna i pr≤bowaµ j▒ wykonaµ.
Przyk│ad 12-1. Przyk│ad zmiennej funkcji
<?php
function foo() {
echo "In foo()<br>\n";
}
function bar( $arg = '' ) {
echo "In bar(); argument was '$arg'.<br>\n";
}
$func = 'foo';
$func();
$func = 'bar';
$func( 'test' );
?>
|
|