Argument

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

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

Wiki letter w.png To jest tylko zalążek artykułu. Jeśli możesz, rozbuduj go.


--Jarrod 00:45, 19 wrz 2009 (UTC)