LINUX.ORG.RU
ФорумTalks

Ссылки в пхп, неадекватное поведение

 


0

1

В связи с темой PHP 8.4 — большое обновление языка, напомнившей мне про пхп, решил его кое-где применить и в ходе планирования наткнулся на такую штуку.

Примеры:

<?php
  $a = array('a' => 1);
//  $X = array(&$a['a']); $X = 1;
  $b = $a;
  $a['a'] = 2;
  var_dump($b);
<?php
  $a = array('a' => 1);
  $X = array(&$a['a']);// $X = 1;
  $b = $a;
  $a['a'] = 2;
  var_dump($b);
<?php
  $a = array('a' => 1);
  $X = array(&$a['a']); $X = 1;
  $b = $a;
  $a['a'] = 2;
  var_dump($b);
<?php
  $a = array('a' => 1);
  $X = array(&$a['a']);
  $b = $a;
  $a['a'] = 2;
        $X = 1;
  var_dump($b);
<?php
  $a = array('a' => 1);
  $X = array(&$a['a']);
  $b = $a;
        $X = 1;
  $a['a'] = 2;
  var_dump($b);
в зависимости от операций над совершенно посторонней переменной будет меняться содержимое $b. Почему оно так себя ведёт - понятно (кому непонятно, попробуйте сами без подсказок догадаться, возможно будет занимательно; а те, кто считает себя профессиональными пхпшниками, попробуйте не выполняя скрипты догадаться каким будет их результат, тоже интересно). Пятый вариант кстати оказался неожиданностью, но и ему нашлось ещё одно объяснение.

Но, тем не менее, я всё же немножко удивился, что они эту штуку не попытались как-то хотя бы спрятать с глаз, всё-таки некрасиво получается.

Впрочем, это, как и остальные его мелкие некрасивости, никак не влияет на тот факт, что пхп всё равно лучший вариант для «накодить несложное по-быстрому».

★★★★★

Последнее исправление: firkax (всего исправлений: 4)

Пятница была вчера, у тебя в примере первом ничего не меняется, зачем еще 10 штук я не разбирался. Ссылки работают ближе к var-аргументу в паскале, чем к указателю в С.

Вообще проще их избегать используя классы, они передаются без копирования как массивы, а «по указателю».

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 4)
Ответ на: комментарий от MOPKOBKA

Что значит «в примере ничего не меняется»? Надо разные примеры друг с другом сравнивать.

Как работают ссылки я знаю, а ты кажется нет. Они с аргументами вообще никак не связаны.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Если бы ты знал, то треда бы не было. 10 примеров сравнивать между собой то еще удовольствие (визуально что бы понять чем они отличаются хотя бы), уверен отпишется пол лора, только скопирует их в блокнот себе.

Примерами можно подловить тех кто не пишет на PHP, но именно логикой копирования массива, во всех языках это обычно не копии а ссылки.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Если бы ты знал, то треда бы не было.

Что ты несёшь? Дочти до конца тему перед ответом.

Примерами можно подловить

Я никого не собирался подлавивать. Повторю, дочитай до конца, потом пиши. Если неинтересно - просто иди мимо (тема толксах, если ты не заметил, а значит она носит развлекательный характер).

firkax ★★★★★
() автор топика

Это описано в документации. Почему – лично я недопетрил. Лень. Но это странность, да.

rechnick ★★★
()
Ответ на: комментарий от rechnick

Хм, и правда описано, но оно от этого менее странным не становится. И кстати поведение пятого примера там не описано.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

менее странным не становится

А можно как-то в двух словах сказать что тебе кажется странным. Неспособность сформулировать претензию и выкатывание простыни из примеров как бы говорит что ТЫ всё таки нишиша не понимаешь в ссылках.

PS: а ещё какие-то тупые примеры используешь. Зачем писать $X=1 если можно $X=42 и тогда будет понятно где было реальное изменение, а где «просто совпало».

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)