Posted in Development/PHP
Однажды я жаловался, что
<?php
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i;
в PHP не работает. Так вот. Начиная с PHP7 благодаря новому парсингу синтаксиса
<?php
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i; // 0123456789
очень даже работает.
Comments
php features, php generators, yield
Posted in Development/PHP
<?php
function func($a, $b, ...$params)
{
var_dump($a, $b, $params);
}
func(1,2,3,4,5);
// int(1)
// int(2)
// array(3) {
// [0]=>
// int(3)
// [1]=>
// int(4)
// [2]=>
// int(5)
// }
// cool!
$a = [1,2,3,4,5];
func(...$a);
// int(1)
// int(2)
// array(3) {
// [0]=>
// int(3)
// [1]=>
// int(4)
// [2]=>
// int(5)
// }
// even cooler!
$a['qq'] = 'qq';
func(...$a);
// PHP Catchable fatal error:
// Cannot unpack array with string keys in /tmp/test.php on line 16
// okay :(
$b = [];
$b[1] = 1;
$b[4] = 4;
$b[2] = 2;
$b[5] = 5;
$b[3] = 3;
func(...$b);
// int(1)
// int(4)
// array(3) {
// [0]=>
// int(2)
// [1]=>
// int(5)
// [2]=>
// int(3)
// }
// WAT?
Comments
php features
Posted in Development/PHP, Development/Ruby
Извращаюсь с новой игрушкой
<?php
$a = function () {for ($i = 0; $i < 10; $i++) yield $i;}; foreach ($a() as $i) echo $i; // 0123456789
Жаль, что не работает foreach ($a as $i) echo $i;, тогда можно было бы написать короче
<?php
foreach(function () {for ($i = 0; $i < 10; $i++) yield $i;} as $i) echo $i;
Или будь PHP похож на одного из своих предков, можно было бы
<?php
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i;
Даже извращения не работают типа
<?php
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})->__invoke() as $i) echo $i;
Если кто не догнал, я пытаюсь сделать вот это:
(0..9).each { |i| print i }
Comments
php features, yield