Юрьевич К.
328 сообщений
#15 лет назад
Оффтопик
ну так а кому миллион достанется?
Андрей К.
1172 сообщения
#15 лет назад
Поделим 50/50, если нам его выплатят.
Себастьян Ф.
584 сообщения
#15 лет назад
Выход приведение типов


<?php
a(0,(int)$$var);

$temp1=1;
$temp2=2;
echo $temp1;

function a($b,$c) {}


или передача по ссылке


<?php
a(0,$$var);

$temp1=1;
$temp2=2;
echo $temp1;

function a($b,&$c) {}
Вадим Т.
3240 сообщений
#15 лет назад
Написал на эту тему небольшую мини-статью на Хабре:
Андрей К.
1172 сообщения
#15 лет назад
SField, на самом деле выход - не использовать неопределенные переменные. Но такого эффекта не должно быть при любых раскладах.
Кирилл Е.
2817 сообщений
#15 лет назад
Цитата ("tvv"):
Это баг PHP 5.3.* (проверяли в 5.3.0 и в 5.3.2).


У меня рнр 5.3.0 - этого бага нет. Рнр работает на х64 ос на локальном ПК.

unset($temp1);
unset($temp2);
$temp1='бред';
$temp2='собачий';
echo $temp1;
die;


результат

бред
Антон Ф.
3557 сообщений
#15 лет назад
Оффтопик
вчера на хабре читал) от вашего друга пост
Вадим Т.
3240 сообщений
#15 лет назад
Цитата ("kirilev"):
У меня рнр 5.3.0 - этого бага нет. Рнр работает на х64 ос на локальном ПК.

Попробуйте другой пример, см. мое сообщение на предыдущей странице, вчера 18:05.
Кирилл Е.
2817 сообщений
#15 лет назад
Цитата ("tvv"):
Попробуйте другой пример, см. мое сообщение на предыдущей странице, вчера 18:05.


Да, действительно:
a(0,$$var);

$temp1 = 1;
$temp2 = 2;
$temp3 = 3;

echo $temp1;

function a($b,$c) {}


выводит: 3 вместо 1.
К чему я пришел:
собака зарыта в вызове фукнции а(), где второй параметр переменная переменной $var, у нас $var не упоминается в коде, потому при попытке передать несуществующую переменную переменной как второй аргумент функции - интерпретатор дурет (что собственно логично) если сделать:

	error_reporting(E_ALL);

a(0,$$var);

$temp1 = 1;
$temp2 = 2;
$temp3 = 3;

echo $temp1;

function a($b,$c) {}


в ответ получим:

Notice: Undefined variable: var in D:\xampp\htdocs\server\test_001\index.php  on line 5

Notice: Undefined variable: in D:\xampp\htdocs\server\test_001\index.php on line 5
3


вторая строчка - это и есть намёк на ошибку использования $$.

если сделать:

	error_reporting(E_ALL);

$var = 0;
$$var = 0;

a(0,$$var);

$temp1 = 1;
$temp2 = 2;
$temp3 = 3;

echo $temp1;

function a($b,$c) {}


Получим 1, что и должны были получить..

Это очередной раз доказывает: нужно смотреть что куда передаём, обнулять значения переменных и т.п... не леница, следить и обрабатывать данные, над которыми работает скрипт\алгоритм\функция у кого что..
..особенно в рнр, который не требует обязательного оглашения переменный перед использованием.

Да.. рнр - лёгкие деньги.. сел, написал как-то.. как-то заработало.. оплату получил - смылся... не то что какой-то компилированный язык.. ))..
Александр Ж.
575 сообщений
#15 лет назад
kirilev, последнее предложение ваше не к месту
Кирилл Е.
2817 сообщений
#15 лет назад
Sassoft, это не предложение, это наблюдение... скорее стёб.
Роман В.
99 сообщений
#15 лет назад
kirilev, тогда уж компилируемый язык.
Никто не мешает и на ПХП писать достойно.
Может сайты на АСМе писать? долго, зато не легко?
Юрьевич К.
328 сообщений
#15 лет назад
Оффтопик
у нас нашелся обладатель 1кк$ ? ^_^
Кирилл Е.
2817 сообщений
#15 лет назад
Оффтопик
r0b1n, но речь не о этом
Андрей К.
1172 сообщения
#15 лет назад
Цитата ("kirilev"):
интерпретатор дурет (что собственно логично)

Объясните, пожалуйста, каким местом это логично?

Баг в моем коде через целую череду случайностей спровоцировал баг в php. Во-первых, переменная должны была быть неопределена (это мой баг). Во-вторых, она должна следом использоваться как переменная переменная. В-третьих, она должна передаваться в функцию именно вторым параметром. И в дальнейшем это отражается не на работе самой функции, а на совершенно другом участке кода.

Вот только не надо путать наличие багов в разрабатываемом скрипте и их наличие в релизе. С утра я скопировал готовый модуль с сервера (где пришлось его доделывать) на комп и проблема прошла сама собой, т.к. ошибки уже не было. И если бы Вадим не интересовался этим багом, то я просто забил бы на него, т.к. в готовом коде его уже не было. Но только ради того, что tvv уже потратил время на разбор ситуации, специально откатил изменения на сутки и продолжили копать, что и привело к такому "открытию".

Просто запомните одну истину: баги допускают все. Но кто-то их игнорирует, кто-то правит, а у кого-то они в голове.
Юрьевич К.
328 сообщений
#15 лет назад
Оффтопик
анекдот в тему:

Приходит шеф в офис, заходит в IT отдел к сисадмину и видит у него на столе в баночке маленького жучка.
Шеф спрашивает у сисадмина:
-Вась, что это?
Сисадмин отвечает:
-Я нашел баг!
Евгений Кашкаров
450 сообщений
#15 лет назад
Оффтопик
Цитата ("bushmaster"):
анекдот в тему:

Приходит шеф в офис, заходит в IT отдел к сисадмину и видит у него на столе в баночке маленького жучка.
Шеф спрашивает у сисадмина:
-Вась, что это?
Сисадмин отвечает:
-Я нашел баг!

... и локализовал
Кирилл Е.
2817 сообщений
#15 лет назад
Цитата ("Lisio"):
Объясните, пожалуйста, каким местом это логично?

Это относится к тому куску, который навел tvv, а ваш код у меня работает как надо, о чём писал немного выше.

Тем местом - была попытка выполнить действия над неопределёнными данными (передать переменную переменной $var которая не определена).. в таком случае нельзя ожидать верный результат...
Андрей К.
1172 сообщения
#15 лет назад
Цитата ("kirilev"):
Это относится к тому куску, который навел tvv, а ваш код у меня работает как надо, о чём писал немного выше.

А мой код у вас не может работать как надо, так как выдернуто около 500 строк предыдущего кода.

Цитата ("kirilev"):
в таком случае нельзя ожидать верный результат...

Верный результат работы функции, в которую передавалась неинициализированная $$ - нельзя ожидать. Верный результат работы кода, который с этим блоком совершенно не связан - можно и нужно ожидать.
Кирилл Е.
2817 сообщений
#15 лет назад
Цитата ("Lisio"):
так как выдернуто около 500 строк предыдущего кода.

это и нужно было указать в первом посте.

Оффтопик
bushmaster,