[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопросец Твину о "двойных стандартах"
Страницы: 1, 2
sergeiss
Вот есть "холивар" про ООП. http://phpforum.ru/index.php?showtopic=69373&hl=
Но хрен с ним, с холиваром smile.gif Меня больше интересуют "ответвления" от той темы. В частности, ты привел свой код, тебе стали задавать вопросы....

Цитата (forza @ 12.12.2012 - 01:20)
return @mysql_result($res, 0); Почему игнорируется ошибка?


Цитата (twin @ 12.12.2012 - 01:30)
Ошибка? А зачем она мне там? Функция mysql_result() генерирует фатальную  ошибку если запрос вернул фигу. Мне ошибка не нужна, мне нужно FALSE. И собачка - самый рациональный способ его получить.


Я это прочитал и воскликнул "Но позвольте! Твин же меня как-то давно, на конкурсе, критиковал именно за именно такой же подход!!! Я не поленился, нашел "пруфлинк". Вот тема:
http://phpforum.ru/index.php?showtopic=57186
А вот текст:
Цитата (twin @ 26.04.2012 - 09:49)
Дальше. Строить логику на ошибках MySQL - вообще неприемлимо. Ты не сможешь понять, запрос не прошел потому что он кривой или потому что так нужно о логике. Не годится.На запросы собачек наставил, а на инициализацию нет. Нотайсы - получите, распишитесь. Зря при разработке ошибки давишь. Ой зря.


Так что же получается? "Двойные стандарты"? На конкурсе низзя, а в живом проекте - можно? wink.gif Вот ответь "перед лицом своих товарищей по оружию". А то как-то непонятно получается.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
Не путай божий дар с яичницей. Ты строил логику на ошибках запроса. А я исправил недочет PHP. Функция по идее не должна выкидывать фатальную ошибку, если запрос возвращает пустое значение. Какое ей дело до запроса. Ничего нет, так и выдай фальсе, или пустоту на худой конец. Какого хрена тормозить скрипт?

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
"Мне ошибка не нужна, мне нужно FALSE" - это твои слова. Вне зависимости от причины ошибки. А когда я что-то подобное говорил в той, "конкурсной" теме, то ты меня критиковал.

Цитата (twin @ 12.12.2012 - 22:00)
Какого хрена тормозить скрипт?

Не понял... Что его тормозит, использованная мной "собачка"? Да даже если и тормозит, то и хрен с ней smile.gif Главное - чтобы ошибки не было. Потому что в конкурсе предлагалось что сделать? Правильно - счетчик. Который не должен останавливать основной скрипт, если у счетчика ошибки возникли. Так что там, в конкурсе, это было оправдано на 146%. И, в то же время, было раскритиковано тобой лично.

Но в рабочем проекте это "ОК". Вот я и говорю поэтому про "двойные стандарты".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
Ты не понял нифига. Ты задавил собакой mysql_query(). А значит не знаешь, отработал запрос или нет. У меня, если посмотришь внимательно, перед mysql_result() стоит обертка функции mysql_query(), которая эти ошибки логирует. Я не останавливаю скрипт, но я в курсе того, что происходит. Ты - нет. Вот о том я и говорил.
Цитата
Строить логику на ошибках MySQL - вообще неприемлимо. Ты не сможешь понять, запрос не прошел потому что он кривой или потому что так нужно по логике. Не годится.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Игорь_Vasinsky
Свернутый текст
не могли бы вы свои спорные моменты подкреплять кодами, не удобно скакать по 3м темам.


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
Цитата (Игорь_Vasinsky @ 12.12.2012 - 22:18)
не удобно скакать по 3м темам.

А ты не скачи по 3-м smile.gif Одной достаточно, той, что конкурская.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
inpost
sergeiss
У тебя отсутствует логирование ошибок, то есть при установке к себе скрипта я не смогу им пользоваться. Я не узнаю причин краха, почему он не был запущен. В этом проблема.
В коде, что у Николая, там идёт логирование ошибок, а return @lala; - вернёт false, то есть функция вернёт или true + данные, или false, то есть так, как скрипт не был остановлен, то функция возвращает один из двух результатов: true\false, и отвечает стандартам.

Так что тут ты уж не прав.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
ApuktaChehov
Хочу толкнуть телегу в возможном завершении темы.

@ - в пхп сделана не просто так. Да. Многие начинающие используют ее для бегства от ошибок. Типа - "Не вижу ошибок, значит все хорошо!". У Николая как раз наоборот. Он не бежит от ошибок. Он использовал @ для того, что бы скорректировать результат работы mysql_result(). Я вот тоже удивляюсь, какого хрена она выдает критическую ошибку если запрос ничего не вернул.

P.S. Чтобы не применялось, если применяется с умом и во благо - гут! laugh.gif

_____________
sergeiss
Цитата (ApuktaChehov @ 13.12.2012 - 09:41)
@ - в пхп сделана не просто так.

А никто с этим и не спорит smile.gif Но в той конкурсной работе был сделан обход возможных проблем, с той целью, чтобы скрипт счетчика не мешал основному скрипту. А Николай это раскритиковал. Поэтому и сия тема появилась.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
SlavaFr
Мое мнение
Я согласен, что подавление mysql_result носит совсем другой характер чем подавление ошибки при mysql_query и по этому согласен с возмущением @twin, что эти примеры сравнивать не совсем уместно.
С чем я не совсем согласен, так это с тем, что в целях сокращения кода вместо создания своей функции которая на всегда решила бы проблему с пустыми строчками, использовалась подавление ошибки.
Я знаю!
Мало времени!
Непомню где я это уже зделал!? smile.gif
Да я согласен что "@" гораздо короче чем дополнительно проверять имеется ли строчка в диапазоне mysql_num_rows, но если это раз зделанно где нибудь в классе БД, то эта проблема никогда больше не возникает.
А вообще я сам от "@" не так давно отучился rolleyes.gif . Может быть на скорую руку тоже влепил бы smile.gif , но на работе руки отобьют. biggrin.gif

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
twin
Однажды один очень крутой программист меня спросил. А почему ты не пользуешься такой инициализацией:
$name = @$_POST['name'];
?

Если бы меня спросил какой-нибудь начинающий, я бы пустился бы в такие же пространные рассуждения. А тут крепко задумался - а действительно, почему?

Это короче, быстрее, нагляднее тернарного оператора. А результат тот же самый.

Ответ очевиден - мода. Вот:
Цитата
но на работе руки отобьют.
Единственный аргумент.
У меня тоже до сих пор не поднимается рука так сделать, вот до чего засрали мозги. Как с Василь Иванычем, который 0,5 + 0,5 высчитывал. Умом понимаю, говорит, что литр, а на бумаге не могу выразить.

Это из той же оперы, что и запрет на dlobal, ststic, eval(), модификатор e, GOTO и еще половину PHP))) Кто-то ляпнул неподумавши, что собака злая, и теперь мы боимся даже пикинесов.

Ну вот чем интересно знать лучше несколько функций, чем одна с собачкой? Пусть в классе БД, на сей раз не буду спорить. Функции mysql_result, file_get_contents(), unset() и еще несколько - прямые кандидаты в кинологи. Ибо сделаны в PHP топорно. А раз сделаны топорно, то нужно както обходить это малой кровью...

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
SlavaFr
В общем то, что отобьют руки не является единственным аргументом. Просто в коде это собака, а на самом деле пхп стартует не только все процессы, чтоб сгенерировать и довести до нас возможную ошибку, на и пытается потом оутпут этой ошибку подавить. Эта информация мне была давно сказана людьми которые сам код пхп интерпретера разбирали. Я незнаю, возможно ситуация изменилась или может этой проблеммы вообще небыло, но кроме этого аспекта существует общая первая реакция "Он не предпринял достаточных усилий на то, чтоб реагировать на ошибки в программе". Потом конечно можно разобраться, что проблема была не критическая, и то, что собака в данном случае не страшна. Но ктото потратит минимальное внимание на то, чтоб с этим разбиратся и его этот маленький значек "@" отвлечет от основной задачи. Если учесь то, что мы код пишем не только для себя, но и для других, то имеет смысл составить код так, чтоб люди не отвлекались от их основных задач.
Цитата (twin @ 14.12.2012 - 03:52)
Функции mysql_result, file_get_contents(), unset() и еще несколько - прямые кандидаты в кинологи. Ибо сделаны в PHP топорно.

Тут я не согласен. Они сделаны не топорно, они делают имено то, что им положено и ругаются обсалютно правильно если не могут сделать предназначенную для них работу. Не кто не виноват в том, что нам в большинстве случаев при открытие файла наплевать на то есть он или нет. Одного устроит null, а другому лучше чтоб он сказал "ей програмист! я не могу дать тебе содержимого файла, так как его нет, или ты не имееш права его читать". Я хочу знать где ошибка и решать что мне делать, менять права в файле или удевлятся тому, что его нет. Если мне подробности не нужны, то специально написать функцию которая как раз подходит для твоего случая и при отсутсвие файла выдает null или "". Такое поведение функций и методов не только в пхп но и в других языках. К примеру в ява
public FileReader(File file)  throws FileNotFoundException

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

с уваженим

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
twin
Не знаю я на уровне ядра, не лазил. Но тесты делал, ничего она не жрет. И если жрет, то куда меньше всеми любимх ексепшенов. Ну и естественно меньше, чем несколько функций и условий для проверки.

А второй аспект - да. Я и написал, что не юзаю собаку при инициализации, хотя это лучше тернарника. Исключительно потому, что с детства боюсь собак. Однако в данном случае здравый смысл взял верх.

Про другие функции, так смотря в каких местах использовать. Вот что лучше, это:

    if(file_exists($file))
{
$content = file_get_contents($file);

// Тут обработка
}
else
$error = 'Проблемы с файлом';


Или это:
    if(($content = @file_get_contents($file)) !== false)
{
// Тут обработка
}
else
$error = 'Проблемы с файлом';
Лично мне симпотичнее второй вариант. file_exists() как не крути, а лишний раз дергает ФС.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
killer8080
Цитата (twin @ 14.12.2012 - 11:55)
Лично мне симпотичнее второй вариант. file_exists() как не крути, а лишний раз дергает ФС.

Второй вариант лучше еще тем, что первый вообще не применим, если в аргументе урл.
SlavaFr
Цитата (killer8080 @ 14.12.2012 - 12:54)
Второй вариант лучше еще тем, что первый вообще не применим, если в аргументе урл.

Да согласен, по этому поводу можно действительно сказать, что функция не достаточно продуманна, так как нет транспарентных предложений по по поводу проверки наличия контента и прав на его чтение предложенного http-враппером. Обычно так все и происходит, когда все в одуну функцию засовывают. Большое удобство которое тяжело контролировать smile.gif. Еще один повод пользоваться Exception по принцыпу, если не можеш сам ни чего в случае ошибок предложить, то предоставь эту возможность другим.




_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.