chris_archer: (Default)

Однажды я жаловался, что

foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i;

в PHP не работает. Так вот. Начиная с PHP7 благодаря новому парсингу синтаксиса

foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i; // 0123456789

очень даже работает.

Originally published at Chase Your Dreams!. You can comment here or there.
chris_archer: (Default)

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)
// }
// круто!

$a = [1,2,3,4,5];

func(...$a);
// int(1)
// int(2)
// array(3) {
// [0]=>
// int(3)
// [1]=>
// int(4)
// [2]=>
// int(5)
// }
// еще круче!

$a['qq'] = 'qq';

func(...$a);
// PHP Catchable fatal error:
// Cannot unpack array with string keys in /tmp/test.php on line 16
// ну ок

$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?

Originally published at Chase Your Dreams!. You can comment here or there.
chris_archer: (Default)

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)
// }
// круто!

$a = [1,2,3,4,5];

func(...$a);
// int(1)
// int(2)
// array(3) {
// [0]=>
// int(3)
// [1]=>
// int(4)
// [2]=>
// int(5)
// }
// еще круче!

$a['qq'] = 'qq';
// PHP Catchable fatal error:
// Cannot unpack array with string keys in /tmp/test.php on line 16
// ну ок

func(...$a);

$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?

Originally published at Chase Your Dreams!. You can comment here or there.
chris_archer: (Default)

Извращаюсь с новой игрушкой

  1. $a = function () {for ($i = 0; $i < 10; $i++) yield $i;};
  2. foreach ($a() as $i) echo $i; // 0123456789

Жаль, что не работает foreach ($a as $i) echo $i;, тогда можно было бы написать короче

  1. foreach(function () {for ($i = 0; $i < 10; $i++) yield $i;} as $i) echo $i;

Или будь PHP похож на одного из своих предков, можно было бы

  1. foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i;

Даже извращения не работают типа

  1. foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})->__invoke() as $i) echo $i;

Если кто не догнал, я пытаюсь сделать вот это:

  1. (0..9).each { |i| print i }
Originally published at Chase Your Dreams!. You can comment here or there.

Profile

chris_archer: (Default)
chris_archer

September 2017

S M T W T F S
     12
34 56789
10 111213141516
17181920212223
24252627282930

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 21st, 2017 08:39 am
Powered by Dreamwidth Studios