On gists
PHP - Yield
PHP
example.php
Raw
#
<?php
function generatorFunction() {
yield 1;
yield 2;
yield 3;
}
// Použití generátoru
$generator = generatorFunction();
foreach ($generator as $value) {
echo $value . ' ';
}
// Výstup: 1 2 3
/* ----------------------------- */
names.txt
===
John Doe
Jane Smith
Bob Johnson
Alice Williams
... (a mnoho dalších jmen)
function readNamesFromFile($filename) {
$file = fopen($filename, 'r');
if (!$file) {
throw new Exception("Nepodařilo se otevřít soubor.");
}
while (($line = fgets($file)) !== false) {
yield trim($line);
}
fclose($file);
}
// Použití generátoru pro zpracování jmen ze souboru
$generator = readNamesFromFile('names.txt');
foreach ($generator as $name) {
// Provádění operace s každým jménem
echo "Hello, $name!" . PHP_EOL;
}
/* ----------------------------- */
function randomDataGenerator($count) {
for ($i = 0; $i < $count; $i++) {
yield rand(1, 100); // Generujeme náhodné číslo v rozmezí 1 až 100
}
}
// Generujeme 10 náhodných čísel
$generator = randomDataGenerator(10);
foreach ($generator as $number) {
// Provádění operace s každým náhodným číslem
echo $number . ' ';
}
/* ----------------------------- */
function searchValueInArray(array $array, $value) {
foreach ($array as $item) {
if (in_array($value, $item)) {
yield $item;
}
}
}
// Příklad použití:
$data = array(
array('id' => 1, 'name' => 'John'),
array('id' => 2, 'name' => 'Jane'),
array('id' => 3, 'name' => 'Bob'),
array('id' => 4, 'name' => 'Alice')
);
$searchValue = 'Bob';
foreach (searchValueInArray($data, $searchValue) as $result) {
echo "Hodnota nalezena: " . $result['name'] . "\n";
}
return-vs-yield.php
Raw
#
<?php
class Team
{
private $index = 0;
private $teams = [];
public function add($team)
{
$this->teams[] = $team;
}
public function getTeam()
{
return $this->teams[$this->index++] ?? null;
}
}
$team = new Team;
$team->add('T1');
$team->add('T2');
$team->add('T3');
$team->add('T4');
$team->add('T5');
$team->add('T6');
$team->add('T7');
$team->add('T8');
$team->add('T9');
$team->add('T10');
while (($teamName = $team->getTeam())) {
echo $teamName . "<br />";
}
echo "<hr />";
/*
-------------------------
*/
class Team2
{
private $index = 0;
private $teams = [];
public function add($team)
{
$this->teams[] = $team;
}
public function getTeams()
{
foreach ($this->teams as $index => $t) {
yield $t;
}
}
}
$team = new Team2;
$team->add('T1');
$team->add('T2');
$team->add('T3');
$team->add('T4');
$team->add('T5');
$team->add('T6');
$team->add('T7');
$team->add('T8');
$team->add('T9');
$team->add('T10');
$teamGenerator = $team->getTeams();
$teamName = $teamGenerator->current();
echo $teamName . "<br />";
$teamGenerator->next();
$teamName = $teamGenerator->current();
echo $teamName . "<br />";
$teamGenerator->next();