Generatory: Różnice pomiędzy wersjami

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania
(dodano informację o wprowadzonych kilka miesięcy temu generatorach)
 
m (Przykłady)
 
Linia 42: Linia 42:
 
?></source>
 
?></source>
  
Należy pamiętać o tym, że z tablicy utworzonej za pomocą funkcji wykorzystującej generatory nie można wyświetlić konkretnego elementu. Np. jeśli dodalibyśmy do powyższego przykładu linijkę:
+
Należy pamiętać o tym, że z tablicy utworzonej za pomocą funkcji wykorzystującej generatory nie można wyświetlić ani odwołać się konkretnego elementu. Np. jeśli dodalibyśmy do powyższego przykładu linijkę:
  
 
<source lang="php">echo $tablica["brat"];</source>
 
<source lang="php">echo $tablica["brat"];</source>

Aktualna wersja na dzień 20:18, 20 paź 2013

Definicja

Generatory umożliwiają używanie prostych iteratorów, które ułatwiają korzystanie z funkcji. Generatorów można używać tylko w funkcjach w PHP od wersji 5.5.

Przykłady

Aby użyć generatora, należy posłużyć się słowem kluczowym yield. Przykład najprostszej funkcji z użyciem generatorów, która utworzy tablicę z dzielnikami danej liczby.

<?php
 
function dzielniki($liczba) 
{
  for($n = 1; $n <= $liczba; $n++)
    {
    if($liczba % $n == 0) yield $n;
    }
}
 
$tablica = dzielniki(24); # 1, 2, 3, 4, 6, 8, 12, 24

?>

Funkcje używające generatorów mogą zwracać również tablice z kluczami, np.:

<?php
 
function klucze($tablica1, $tablica2)
{
  for($n = 0; $n < count($tablica1); $n++)
    {
    yield $tablica1[$n] => $tablica2[$n];
    }
}
 
$członkowie = ["brat", "dziadek", "ojciec"];
$imiona = ["Franek", "Janek", "Jakub"];
$tablica = klucze($członkowie, $imiona);
 
foreach ($tablica as $czlonekRodziny=>$imie)
{
echo "Mój $czlonekRodziny ma na imię $imie. <br>";
}
 
?>

Należy pamiętać o tym, że z tablicy utworzonej za pomocą funkcji wykorzystującej generatory nie można wyświetlić ani odwołać się konkretnego elementu. Np. jeśli dodalibyśmy do powyższego przykładu linijkę:

echo $tablica["brat"];

otrzymalibyśmy błąd.

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