Size: a a a

2020 January 28

AM

Artem Molotov in PHP
кстати, достаточно хороший пак для админов (около 50% стикеров). Нужно только некоторые вырезать.
источник

F

Fogr in PHP
Konstantin
Передавай по ссылке
добрался до компа, по опкодам отличия между передачей по ссылке и просто передачей не увидел, по времени тоже - оба варианта медленнее, чем передача просто массива без распаковок / запаковок, вот пример кода:
<?php
declare(strict_types=1);

class Test {
}

function countTests(Test &...$tests) {
   return count($tests);
}

$tests = [];
for ($i = 0; $i < 100; $i++) {
   $tests[] = new Test();
}

$begin = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   countTests(...$tests);
}
echo 'Time: ' . round(microtime(true) - $begin, 3) . "\n";
может я что-то не так понял?
источник

VS

Valentin Saik in PHP
Fogr
добрался до компа, по опкодам отличия между передачей по ссылке и просто передачей не увидел, по времени тоже - оба варианта медленнее, чем передача просто массива без распаковок / запаковок, вот пример кода:
<?php
declare(strict_types=1);

class Test {
}

function countTests(Test &...$tests) {
   return count($tests);
}

$tests = [];
for ($i = 0; $i < 100; $i++) {
   $tests[] = new Test();
}

$begin = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   countTests(...$tests);
}
echo 'Time: ' . round(microtime(true) - $begin, 3) . "\n";
может я что-то не так понял?
А на сколько большая разница?
источник

VS

Valentin Saik in PHP
В скорости
источник

KN

Kirill Nesmeyanov in PHP
Fogr
добрался до компа, по опкодам отличия между передачей по ссылке и просто передачей не увидел, по времени тоже - оба варианта медленнее, чем передача просто массива без распаковок / запаковок, вот пример кода:
<?php
declare(strict_types=1);

class Test {
}

function countTests(Test &...$tests) {
   return count($tests);
}

$tests = [];
for ($i = 0; $i < 100; $i++) {
   $tests[] = new Test();
}

$begin = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   countTests(...$tests);
}
echo 'Time: ' . round(microtime(true) - $begin, 3) . "\n";
может я что-то не так понял?
я уже писал что передача по ссылке влияет на скорость GC
источник

KN

Kirill Nesmeyanov in PHP
ибо передача по значению может подчистить за собой сразу же, если rc = 0
источник

KN

Kirill Nesmeyanov in PHP
под "почистить" я имею ввиду либо физическую чистку, либо приведение zval к типу unset
источник

KN

Kirill Nesmeyanov in PHP
или как его там...
источник

F

Fogr in PHP
Valentin Saik
А на сколько большая разница?
на вскидку раза в 3, но как я понимаю чем больше размер передаваемого массива, тем больше разница
источник

F

Fogr in PHP
я тестировал 100 элементов
источник

F

Fogr in PHP
Kirill Nesmeyanov
я уже писал что передача по ссылке влияет на скорость GC
в данном случае я почему-то не увидел разницу в опкодах
источник

KN

Kirill Nesmeyanov in PHP
пользуясь случаем хочу напомнить, что типы в пыхе исполняются в рантайме
источник

F

Fogr in PHP
т.е. похоже ссылка не работает так, как хотел Константин
источник

KN

Kirill Nesmeyanov in PHP
так что конструкция
function example(Test ...$x){}

примерно аналогична:
function example(array $x)
{
   foreach ($x as $y) {
       assert($y instanceof Test);
   }
}
источник

F

Fogr in PHP
Kirill Nesmeyanov
так что конструкция
function example(Test ...$x){}

примерно аналогична:
function example(array $x)
{
   foreach ($x as $y) {
       assert($y instanceof Test);
   }
}
Подозреваю что всё может быть немного сложнее
источник

KN

Kirill Nesmeyanov in PHP
Fogr
Подозреваю что всё может быть немного сложнее
ессесна
источник

KN

Kirill Nesmeyanov in PHP
ассерт - это одна инструкция, а тайпхинт - две)
источник

KN

Kirill Nesmeyanov in PHP
ZEND_TYPE_CHECK и ZEND_GET_TYPE
источник

VS

Vladislav Soprun in PHP
+1
источник

KN

Kirill Nesmeyanov in PHP
или xxx_TYPE_GET
источник