Есть ли удобная замена конструкции... if(@$v) $v=...

Nicholas

Новичок
Всем любителям @

Простенький тест:
PHP:
$result = array();
$sum = 0;
for ($i = 0; $i < 10; $i++) {
	$start_test = microtime(true);
	for ($j = 0; $j < 1000000; $j++) {
		if (isset($test)) { /*Для второго теста здесь подставить if (@$test)*/
			$test = $_POST['test'];
		}
		else {
			$test = 'test';
		}
	}
	$result[$i] = microtime(true) - $start_test;
}
echo 'Время работы теста: ';
for ($i = 0; $i < 10; $i++) {
	printf ('%.3f|', $result[$i]);
	$sum += $result[$i];
}
printf ('<b>%.3f</b>', $sum/10);
В результате получаем:
Код:
Время работы первого теста: 0.429|0.404|0.392|0.400|0.393|0.395|0.394|0.389|0.391|0.419|[B]0.401[/B]
Время работы второго теста: 2.537|2.523|2.495|2.526|2.491|2.523|2.495|2.524|2.505|2.520|[B]2.514[/B]
То есть @ в 6 раз медленнее, чем isset

Далее, если инициализировать переменную следующим образом:
PHP:
$var1 = @$test ? $test : 15;
$var2 = isset($test) ? $test : 15;
То при значениях $test = 15 | 0 | null, получаем:
Код:
var1: 15, var2: 15
var1: 15, var2: 0
var1: 15, var2: 15
То есть во втором случае у нас переменная инициализируется неверным значением.
 

С.

Продвинутый новичок
создать конструкцию, заглушающую предупреждения более продвинутую чем @
Есть такая конструкция!
error_reporting(E_ALL^E_NOTICE);

То, что ты пытаешься сделать на много хуже @ и isset(),
 

Ноябрь

Новичок
tf
дану, давай объсняй что делает эта фунция?
да ниче.. типа возвращает 0, если переменная пустая, можно просто intval применить.. фиг с ней:)

-~{}~ 29.11.07 08:14:

Nicholas
@$test = !empty($test)
мои результаты
0.474|0.461|0.472|0.465|0.467|0.460|0.468|0.463|0.470|0.460|0.466
1.731|1.631|1.639|1.525|1.532|1.531|1.533|1.528|1.534|1.536|1.572
т.е !empty работает где-то на 0,0000011с быстрее.., я думаю 0,0000011с эта та роскошь, которую себе можно позволить:))

-~{}~ 29.11.07 08:15:

То, что ты пытаешься сделать на много хуже @ и isset(),
очень даже может быть..
 

serglt

Анус, ой, Ахтунг
Ноябрь
Скорость скоростью, а вот то что тебе привел дальше товарищ Nicholas ты проигнорировал, то что конструкция с затычкой работает не правильно это по барабану, я так понимаю?

Я тоже использую животных, но только в тех случаях когда по другому нельзя

Из мана:
fopen
Если открыть файл не удалось, функция вернёт FALSE и сгенерирует ошибку уровня E_WARNING. Вы можете использовать @ для того, чтобы подавить это предупреждение.
 

dark-demon

d(^-^)b
> Использование @ показывает на ленность программиста

все программисты делятся на ленивых и индусов ^_^


> @ - признак того что программист просто не знает что он делает

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


> странно вообще то php указывает что есть ошибка в входящих данных

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


> То есть во втором случае у нас переменная инициализируется неверным значением.

верным. просто аналог собаки - функция empty, а не isset:
$var2 = empty($test) ? 15 : $test;


> for ($j = 0; $j < 1000000; $j++) {

а ты какие кавычки используешь? двойные или одинарные?
 

zerkms

TDD infected
Команда форума
нет, это признак того, что он, например, не считает ошибкой отсутствие определённого индекса массива. собака позволяет донести эту мысль и до интерпретатора, не перегружая код лишними условными ветвлениями.
т.е. ты считаешь что код с @ выполняется быстрее чем с isset() ? :)
то, что он пишет, - это предупреждение о возможной ошибке. суть её заключается в следующем: программист думает, что переменная определена и поэтому использует её значение. если программист допускает, что переменная может быть неопределена - значит неопределённость переменной не является ошибкой. поэтому он использует одну из возможных затычек: isset, empty или собаку. первые годны лишь для условных ветвлений. последняя - там, где требуется получить значение.
чем код
$c = @$a . $b;

лучше кода
$a = '';
...
$c = $a . $b;

?
 

Андрейка

Senior pomidor developer
zerkms
тем, что в первом случае результат может быть не равен 0, в отличие от 2ого?
 

Андрейка

Senior pomidor developer
zerkms
уверен, что просто так.. иначе общего между двумя кусками нет ничего + пример этот к другой ситуации получается
 

tf

крылья рулят
Ноябрь, не тупи
что делает эта строчка
PHP:
if (@$v) 
        $intv = intval($v);
-~{}~ 29.11.07 14:22:

zerkms, чем что во взрослых языках при неопределеной переменной в памяти можно получить черти знает что
 

Ноябрь

Новичок
tf
если переменная $v заполнена, то присваивоить ее значение, приведенное к типу int, переменной $intv

что еще она может делать..
 

dark-demon

d(^-^)b
> т.е. ты считаешь что код с @ выполняется быстрее чем с isset() ?

нет, мне не интересны результаты измерений бесконечно малых величин.


> чем что во взрослых языках при неопределеной переменной в памяти можно получить черти знает что

если ты про "неинициированную переменную", то такие языки язык не поднимается называть "взрослыми", ибо программисту вечно приходится бегать подтирать им попку - память освобождать, за указателями следить, переменные инициировать...
 

HraKK

Мудак
Команда форума
если ты про "неинициированную переменную", то такие языки язык не поднимается называть "взрослыми", ибо программисту вечно приходится бегать подтирать им попку - память освобождать, за указателями следить, переменные инициировать...
Ты не прав.
 

baev

‹°°¬•
Команда форума
если ты про "неинициированную переменную", то такие языки язык не поднимается называть "взрослыми", ибо программисту вечно приходится бегать подтирать им попку - память освобождать, за указателями следить, переменные инициировать...
Угу.
«Я уже вжрошлый праграммист и сру, где хачу!
А почиимууу за мной никто не убираиит?!...»
 

tf

крылья рулят
cDLEON, а ты код видел о котором мы говорим?
http://phpclub.ru/talk/showthread.php?postid=761930#post761930
 

cDLEON

Онанист РНРСlub
Зачотный. Тоже себе такой хочу.
ЗЫ. Ищу девушку-программершу-индуску...:D
 
Сверху