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

Всем любителям @

Простенький тест:
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(),
очень даже может быть..
 
Ноябрь
Скорость скоростью, а вот то что тебе привел дальше товарищ Nicholas ты проигнорировал, то что конструкция с затычкой работает не правильно это по барабану, я так понимаю?

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

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

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


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

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


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

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


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

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


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

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

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

?
 
zerkms
тем, что в первом случае результат может быть не равен 0, в отличие от 2ого?
 
zerkms
уверен, что просто так.. иначе общего между двумя кусками нет ничего + пример этот к другой ситуации получается
 
Ноябрь, не тупи
что делает эта строчка
PHP:
if (@$v) 
        $intv = intval($v);

-~{}~ 29.11.07 14:22:

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

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

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


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

если ты про "неинициированную переменную", то такие языки язык не поднимается называть "взрослыми", ибо программисту вечно приходится бегать подтирать им попку - память освобождать, за указателями следить, переменные инициировать...
 
если ты про "неинициированную переменную", то такие языки язык не поднимается называть "взрослыми", ибо программисту вечно приходится бегать подтирать им попку - память освобождать, за указателями следить, переменные инициировать...
Ты не прав.
 
если ты про "неинициированную переменную", то такие языки язык не поднимается называть "взрослыми", ибо программисту вечно приходится бегать подтирать им попку - память освобождать, за указателями следить, переменные инициировать...
Угу.
«Я уже вжрошлый праграммист и сру, где хачу!
А почиимууу за мной никто не убираиит?!...»
 
cDLEON, а ты код видел о котором мы говорим?
http://phpclub.ru/talk/showthread.php?postid=761930#post761930
 
Зачотный. Тоже себе такой хочу.
ЗЫ. Ищу девушку-программершу-индуску...:D
 
Сверху