Size: a a a

2020 November 17

FL

First Last in phpGeeks
Я, видимо, слишком расслабился
А какой кейс, например?
источник

KN

Kirill Nesmeyanov in phpGeeks
ну любой воркер
источник

О

Олег in phpGeeks
Kirill Nesmeyanov
На пальцах (PHP 5.x+), для тех, кто ничего не понял

Передача по указателю:
function foo($obj) { 
   $obj->value = 23;
   $obj = 42;
}

$obj = new Some();

foo($obj);

var_dump($obj); // object(Some) { $value = 23 }

Передача по значению:
function foo($obj) { 
   $obj->value = 23;
   $obj = 42;
}

$obj = new Some();

foo(clone $obj);

var_dump($obj); // object(Some)

Передача по ссылке:
function foo(&$obj) { 
   $obj->value = 23;
   $obj = 42;
}

$obj = new Some();

foo($obj);

var_dump($obj); // int(42)
теоретически у нас в первом примере передается копия указателя на адресное пространство, может Кирилл меня поправит
Поэтому когда мы туда присваиваем 42 оригинальный указатель никак не меняется
источник

KN

Kirill Nesmeyanov in phpGeeks
Kirill Nesmeyanov
ну любой воркер
родраннер, свул, реакт/ратчет, амп, или консольная команда
источник

KN

Kirill Nesmeyanov in phpGeeks
система очередей вообще самый популярный кейс
источник

KN

Kirill Nesmeyanov in phpGeeks
пишешь ему: php console queue --enable-debug например
источник

KN

Kirill Nesmeyanov in phpGeeks
посылается команда и включается логгер, $queue->setLogger(new StreamLogger('php://stdout'));
источник

KN

Kirill Nesmeyanov in phpGeeks
и если setLogger по ссылке принимается и сохраняет, то логгер меняется во всех дочерних объектах
источник

KN

Kirill Nesmeyanov in phpGeeks
Олег
теоретически у нас в первом примере передается копия указателя на адресное пространство, может Кирилл меня поправит
Поэтому когда мы туда присваиваем 42 оригинальный указатель никак не меняется
эм... ну не копия
источник

KN

Kirill Nesmeyanov in phpGeeks
я там гугловую ссылку кидал выше
источник

KN

Kirill Nesmeyanov in phpGeeks
это аналог:
void boo(int *ptr)
{
   *ptr = 7;
}
источник

KN

Kirill Nesmeyanov in phpGeeks
скорее даже boo(const int *ptr)
источник

О

Олег in phpGeeks
Kirill Nesmeyanov
эм... ну не копия
просто в пхп нет такого понятия как разименование как оно есть
источник

KN

Kirill Nesmeyanov in phpGeeks
ну это да, оно неявное
источник

О

Олег in phpGeeks
если смотреть например го то у меня по факту лежат не объекты а 0x0001782g в переменных
источник

KN

Kirill Nesmeyanov in phpGeeks
ну вот, мы создаём новую переменную, которая ссылается на тот же адрес
источник

О

Олег in phpGeeks
указатель на память
источник

О

Олег in phpGeeks
Kirill Nesmeyanov
ну вот, мы создаём новую переменную, которая ссылается на тот же адрес
и я об этом
источник

KN

Kirill Nesmeyanov in phpGeeks
а при передаче по ссылке передаётся та же самая переменная
источник

О

Олег in phpGeeks
Kirill Nesmeyanov
а при передаче по ссылке передаётся та же самая переменная
+
источник