Увидел вот этот символ @: PHP: $xxx = @$_POST['xxx']; Объясните пожалуйста для чего он, в поиске и гугле не нашел(
@ подавляет вывод ошибок. Если в вызваной функции произойдёт ошибка, на экран ничего не будет выведно вне зависимости от настроек. Рядом с переменными этот знак означает, что не будет выведено Notice при попытке использовать необъявленную переменную. Но вообще это можно было и в мане найти.
eaglenix Добавляй его только в готовом продукте, не пользуйся при отладке. А то будет у тебя стоять в скрипте а в html-коде опечатаешься и назовешь поле xxy, в итоге сообщение о ошибке не увидишь, и долго будешь голову ломать, почему-же $xxx пустая. Известные грабли =)
Elkaz Но иногда намного удобнее написать чем isset($_POST['xxx'])?$xxx=$_POST['xxx']:$xxx=null; чтобы ошибки не возникало )
[vs] А ты в курсе, что PHP: <?php $xxx = isset($_POST['bla']) ? $_POST['bla'] : null; // vs $xxx = @$_POST['bla']; по скорости работы разница более 700% составляет, использовать его очень не советуется и что каждое подавление ошибки вызывает огромные накладные расходы, т.к. эта ошибка всёравно обрабатывается, просто сама ошибка не выводится. Нормальный скрипт не должен вызывать ни единого Notice. Если я найду такое из-за того, что человек просто забил на проверку - увволю с работы сразу. Пусть PHP и скриптовый язык, но это не значит что можно писать абы как. C/C++/Java такого не прощает вообще, а нафиг мне программист, который пишет абы как - это только кодеры, которые работают за еду.
Psih, не вопрос скриптовости языка, питончег тоже скриптовый, то такие штуки в нём не проходят. Вопрос личной кошерности. ИМХО, если язык позволяет - делай, как удобнее тебе, а не как удобнее какому-то психу с форума. А сравнивать пхп с языками с жёсткой типизацией вообще не имеет смысла. Ну да, в сях и яве так, но в пхп - нет. В яве на каждый пук городится класс, в пхп нет, так что теперь делать как в яве?
Я бы не сказал, что жёсткая типизация это плохо. Мне тоже удобнее без @ писать, ибо проблем от него потенциально больше чем выгод... Да и какие он вообще выгоды-то приносит?
Clone Ога... (string) $string = $_POST['name']; (int) $age = $_POST['age']; Что мешает так писать? Я считаю, что это наоборот, хорошо, что нет жесткой типизации. Выгоды @ действительно не приносит.
Дык ващще-то в php как раз для облегчения жизни программистам и придумана необязтельность объявления переменной и многое другое. Скрипт PHP: <?php for($a=1;$a<10;$a++) { $str.=$a; } ?> тоже выведет Notice. Самый правильный выход - сделать примерно как в си - объявить переменную и присвоить ей значение. Типа перед циклом дописать $str=null;. А можно не парится и подписать @. И пофиг лишние тысячные-сотые доли милисекунды. В большинстве скриптов, которые пишет большинство программистов, это не существенно.
А если где-то уже была объявлена переменная $str? PHP: <?php $str = '123'; // //... дофига кода // for ($a = 1; $a < 10; $a++) { $str .= $a; }
[vs], ох не знаю для кого это "придумано". В VB тоже есть Option Explict(или как там, запамятовал), только там нет такого понятия как GET-запрос... То есть переменные не могут появиться против воли программиста, им лишь присваивается тип в зависимости от первого значения. В PHP же можно передать условно-любой набор входящих переменных, которые, при использовании неопределённых переменных могут убить скрипт. Или крайне накосячить.
[vs] Можно не значит что так надо писать. Я за такое убиваю, сразу. Переменные надо инициализировать в таком варианте обязательно, потому что не известно что там может в ней быть.
Clone, я не давал оценки ни @, ни жёсткой типизации других языков (см. цитату). Поэтому вопрос мимо. Если хочешь оценок: сам пишу без @, мне он неудобен; языки с жёсткой типизацией мне не подуше - просто потому что потому. Elkaz, я говорил про языки с жёсткой типизацией (см. цитату), не про php. Clone напутал, а ты поддержал. Но раз уж, то приведённый тобой код это не жёсткая типизация, это приведение к типу. Сделай "$string + $age" - строка + число. Это еретические домыслы в языках с жёсткой типизацией. Об этом и говорил: php это php, не надо переносить стиль программирования на других языках программируя на php. Воооот.
Я немного неправильно выразил мысль. Я считаю, что отсутствие жёсткой типизации это плохо потому, что нам приходится контроллировать типы рабочих переменных, чтобы случайно не сложить строку с числом с плавающей запятой ожидая на выходе целое...