PHP: $arr = array('a' => '27', 'b' => '12', 'd' => '2alpha2'); $tmpVar = &$arr['c']; $tmpVar = 2 / $arr['d']; echo $arr['a'] % $arr['b'] + $arr['c']; Что отобразит следующий код и главное почему?
$arr['a'] % $arr['b'] = 3 во 2-й и 3-й строке Вы присваиваете $arr['c'] = 2 / $arr['d'] т.е. $arr['c'] =1 echo $arr['a'] % $arr['b'] + $arr['c']; выводит 4
$tmpVar = &$arr['c']; этой строкой ты говориш, что $tmpVar ссылается на память для переменной $arr['c']. т.е. изменяя $arr['c'] ты автоматом изменяеш и $tmpVar и наоборот, изменяя $tmpVar автоматом изменяется и $arr['c']. это одна и та-же переменная, просто названа по разному.
Фишка кода в том что во второй строке создаётся $arr['c'] со значением NULL а в 3-й (так как $tmpVar это просто ссылка на $arr['c']) ей присваивается int 1 $arr = array('a' => '27', 'b' => '12', 'd' => '2alpha2'); $arr['c'] = NULL $arr['c'] = 2 / $arr['d']; // $arr['d'] у нас переделывается в int и ровняется 2, 2/2=1 а соответственно echo 27 % 12 + 1; // 4
$arr['a'] % $arr['b'] = 3 отобразит 4 потому что 2 / $arr['d'] дает в результате int(1) которая ибо по ссылке &$arr['c'] пихается в $arr['c'] и прибавляется к $arr['a'] % $arr['b']
все равно не могу понять про ссылку я понял имеется ввиду что $arr['d'] считается int 2 байта? или '2alpha2' конвертится как 2?
Но вообще топик иллюстрирует неправильное проектирование, в реальной жизни, такой задачи возникнуть не должно (как теория оно может и интересно, но...)
asik Хотя бы потому что 2alpha2 в реальной жизни (чтоб избежать неразберихи) надо просто зарезать как неправильный ввод (мы там число ждём, а пришёл текст, это первый признак того что что-то пошло не так) По той-же причине я считаю что получать числовые данные с помощью intval($_GET['траляля']) это неправильно, данные надо сначала проверить, и если они пришли нормально то ничего не надо никуда конвертировать без острой на то необходимости
vikrorpert ссылка там. в ссылку пихается единица. ссылка указует на $arr['c'] а почему 2alpha2 = 2 ответ: потому что такова специфика пхп.
еще вопрос PHP: function show() { STATIC $count = 0; return ++$count; } print show(); print show(); print show(); почему тут выводится 123 , разве не будет каждый раз переинициализации переменной?