Argument
Z PHPEdia.pl
Argument to zmienna lub stała przekazywana funkcji.
Przykład
Funkcja graj() przyjmuje jeden argument:
function graj($muzyka){ echo 'Gram '.$muzyka; } graj('jazz'); // wywołanie funkcji z argumentem
Powyższy kod wyświetli:
Gram jazz
Argument jako obiekt
Argumentem funkcji może być również obiekt dowolnej klasy. Jednakże do wersji 4 PHP przekazywanie obiektu jako argument funkcji (lub metody) odbywało się zupełnie inne niż od wersji 5 PHP. W wersji 4 przekazuje się kopię obiektu klasy natomiast od wersji 5 referencję do obiektu klasy. Różnica polega na tym, że w wersji 4 operując na obiekcie a następnie przekazując go do funkcji wykonujesz inne operacje to te operacje nie mają wpływu na właściwości Twojego pierwotnego obiektu. Przeciwnie niż w wersji 5, gdzie przekazując obiekt przekazujesz referencję do niego. Zmieniając właściwości obiektu w ciele funkcji zmieniasz również jego właściwości poza funkcją. Postaram się to zilustrować przykładem:
//dowolna klasa //posiada prywatne pole $t oraz metodę wyświetlania pola $t oraz zwiększania o jeden jego wartości. class Ab { private $t = 0; public function value(){ echo $this->t; } public function increment(){ $this->t++; } } $ab = new Ab(); //tworzenie instancji objektu $ab->increment(); //zwiększamy wartość zmiennej pola $t $ab->value(); //zwróci 1 dla wszystkich wersji PHP function funkcja($obj) { //zmienna $obj jest niezależną kopią $ab w PHP 4 lub referencją do $ab w PHP 5 $obj->increment(); $obj->value(); //zwróci 2 dla wszystkich wersji PHP } funkcja($ab); $ab->increment(); $ab->value(); //zwróci 3 w PHPv5 i 2 w PHPv4
W wersji 4 można było przekazać funkcji referencję do obiektu poprzez użycie znaku & przed przekazaniem zmiennej:
function funkcja(& $obj) {}
Taki zapis umożliwi przekazanie obiektu jako referencji do oryginalnego obiektu do ciała funkcji (w PHP 4).
Typ argumentu
W 5 wersji PHP pojawiła się możliwość określenia typu argumentu funkcji (lub metody). Poniższa deklaracja pozwala na przekazanie funkcji "funkcja" argumentu, który jest tylko i wyłącznie tablicą.
function funkcja(Array $t){ print_r($t); } $test = array('a'=>'b'); funkcja($test);
Natomiast w tym przypadku jeśli przekażemy inny typ jako argument wówczas zostanie wygenerowany błąd a program przestanie się wykonywać. Załóżmy, że zmienna test nie jest tablicą tylko posiada wartość "test". Wynikiem działania będzie:
Catchable fatal error: Argument 1 passed to funkcja() must be an array, string given
To jest tylko zalążek artykułu. Jeśli możesz, rozbuduj go.
--Jarrod 00:45, 19 wrz 2009 (UTC)
