- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
/**
* Функция создает новую таблицу.
* @param $name - имя новой таблицы. Имя должно быть проверено (например функцией mysql_real_escape_*)
* @return TRUE - если новая таблица была создана или FALSE - если нет
*/
function createTable($name) {
$retval = false;
if(!empty($name)){
$query = "CREATE TABLE IF NOT EXISTS `" . $name . "` (`Adres` varchar(150) DEFAULT NULL, `send` int(1) DEFAULT NULL )";
$result = mysql_query($query);
if($result){
$retval = true;
}
}
return $retval;
}
Вроде все хорошо и красиво. Но есть говнинка которая все портит
1_and_0 19.09.2010 21:36 # 0
Vasiliy 19.09.2010 21:48 # 0
{
$retval = true;
}
нет вот это . Не пойму зачем я код этого юноши просматриваю вроде и код нормальный а встречаются вот такие вещи и все сразу портит.
1_and_0 19.09.2010 21:51 # 0
Или возможно я ещё не достиг высшего уровня мастерства в программировании, поведай пожалуйста?
Можно было конечно обойтись без этой переменной и сделать return $result;
Я правило все понял?
istem 19.09.2010 22:56 # 0
1_and_0 19.09.2010 23:05 # 0
if(!empty($name)){
$query = "CREATE TABLE IF NOT EXISTS `" . $name . "` (`Adres` varchar(150) DEFAULT NULL, `send` int(1) DEFAULT NULL )";
$result = mysql_query($query);
return $result;
}
else return false;
}
Kornew 20.09.2010 00:45 # +1
- наф плодить лишние переменные, которые не используются?..
- да и ветка "else" по сути не нужна; но это на любителя...
diok 20.09.2010 07:49 # −5
absolut 20.09.2010 09:29 # +7
Тогда почему у человека две ноздри ?
istem 20.09.2010 09:33 # +1
Нос человека выполнен согласно MISC архитектуре, а в данном примере только RISC
Vasiliy 20.09.2010 09:54 # +2
а Вот анус это точка выхода и он один. (всяких педерастов не рассматриваю)
istem 20.09.2010 10:01 # +1
use анус;
ob_end_flush();
?>
absolut 20.09.2010 10:04 # 0
помимо ануса есть ещё и уретра
Vasiliy 20.09.2010 10:14 # 0
absolut 20.09.2010 10:18 # 0
Kornew 20.09.2010 16:38 # 0
хотя есть и другая функция... но о ней речь не идёт =)
Kornew 20.09.2010 16:51 # +4
с точки зрения интерпретатора Несколько точек выхода не ухудшат производительность и даже наоборот: не придётся выполнять ненужные жампы на конец функции, чтобы выполнить жамп выхода из функции...
с точки зрения нуба(паскалист, школоло, и т.п.):
- несколько точек выхода заставляет напрягать мозг... и "трудно" разобраться в коде...
и правда,- лазить по всем ветвлениям, что куда пошло -- гораздо читабельнее чем "не устраивает -- пшол на ret"...
diok 20.09.2010 18:01 # 0
absolut 20.09.2010 21:33 # 0
Причем тут ошибка в профессии?
В любом деле могут быть как простые, так и сложные моменты.
Анонимус 20.09.2010 21:58 # 0
Вообще в современном мире она МОЖЕТ БЫТЬ нужна только в особых случаях: драйверы, и прочий код режима ядра, ядра каких-то крутых СУБД (типа оракл), системы для обработки гигантских массивов данных (типа поисковых машин гугла и яндекса) и иже с ними.
В PHP она не нужна. Так что код PHP в первую очередь должен быть читаемым.
Так что если код на PHP прочитать трудно -- значит автор кода скорее всего плохой программист, ага))
Конечно можно представить себе что на PHP люди реализовывают сложный алгоритм, для понимания которого нужно быть доктором наук -- тогда конечно разговор особый.
Но такие случаи крайне редки)
Kornew 20.09.2010 23:13 # 0
но жертвовать оптимизацией глупо в любом случае... даже в столь унылом гавне как пхп...
должен быть баланс между читабельностью и оптимальностью...
---------------------------------------
но речь была даже не о том...
- речь была о "Н-ное количество выходов из функции == плоха"...
Анонимус 21.09.2010 00:19 # 0
на самом деле это спорно.
Как бы Вы переписали эту функцию? (извините за синтаксис -- пых я подзабыл)
absolut 21.09.2010 07:14 # 0
а в пользовательском коде:
cheef 21.09.2010 10:38 # 0
cheef 21.09.2010 10:35 # 0
Анонимус 22.09.2010 00:10 # 0
Работа с базой почти всегда является узким местом PHP приложений.
Так что там можно пожертвовать читаемостью
cheef 20.09.2010 10:56 # +1
а вообще глупая функция, что она именно сделала невозможно понять по результатам возвращаемого значения
Vasiliy 20.09.2010 11:09 # 0
cheef 20.09.2010 11:12 # 0
Vasiliy 20.09.2010 13:11 # 0
cheef 20.09.2010 13:25 # −1
Я вам ещё раз повторю свою мысль. Обратите внимание на то, что функция называется createTable. И нормальное для неё поведение - возвращать true - если таблица создана, если false, если не создана. Согласно коду логика другая. О чём я и сказал выше.
Если совсем непонятно - простой пример:
у вас есть метод find который ищет записи по id, например посты. Нормальное для него поведение - возвращать пост или null/false в случае если пост не был найден. А теперь мы добавили в метод логику, согласно которой, если пост не найден, то метод будет возвращать пустой объект Post. А сам метод не переименуем. Вот такого же рода бред в и функции. Название не соответствует действиям.
shizzard 20.09.2010 19:14 # 0
Вы еще предложите коды ошибок возвращать.
absolut 20.09.2010 21:35 # 0
В php может и не актуально. А когда дело стоит за производительностью -
лучше код ошибки, чем исключение.
Анонимус 20.09.2010 22:01 # 0
>>лучше код ошибки, чем исключение.
Да, во многих средах исключения действительно хуже по производительности, чем код ошибки.
Но если Вы не собираетесь бросать over 1K исключений в секунду -- врядли Вы заметите от них хоть какой-то урон.
Ну а для PHP эито правда не актуально
absolut 20.09.2010 23:39 # 0
Не обязательно их вообще даже генерировать пользователю.
Сами библиотеки, которые поддерживают исключения более медленные, чем их
свободные от исключений аналоги.
shizzard 21.09.2010 13:07 # 0
cheef 21.09.2010 10:13 # 0
shizzard 21.09.2010 13:10 # 0
Анонимус 20.09.2010 19:00 # 0
ZeiZ 19.09.2010 21:50 # 0
2) if($result){ ...
не проверяет создана ли таблица, а проверяет только прошел ли запрос к БД.
КО.
Vasiliy 19.09.2010 22:09 # 0
$result===false
Меня волнет выделение лишних переменных
и отсктвие механизма логировния в случаи ошибки я бы делал так
if ($result===false)
{
writelog('Error: '.__FILE__." ".__LINE__.mysql_error().' SQL '.CREATE TABLE IF NOT EXISTS `" . $name . "` (`Adres` varchar(150) DEFAULT NULL, `send` int(1) DEFAULT NULL )");
}
Ну или как то так в любом случае ошибка не осталось не замеченной а тут. Получилось хорошо не получилось ну и ладно потом про пыху и говорят плохо.
This is obvious 19.09.2010 22:15 # +1
не ?
Тащемта, там абсолютно не нужны retval & result
Vasiliy 19.09.2010 22:18 # 0
как там все нормально или были проблемы.
This is obvious 19.09.2010 22:20 # 0
istem 20.09.2010 00:07 # 0
вообще-то можно и вообще не плодить переменные...
Kornew 20.09.2010 00:50 # 0
- обработка ошибок по свичу или там какое-то логирование...
а если тебе нужно просто "да/нет", которое тут же и возвращается из функции, то плодить переменные нету смысла (это влечет за собою лишнюю нагрузку на сервер, пускай и незначительную, но такие задержки накапливаются по всему скрипту)
Анонимус 20.09.2010 00:52 # 0
А вообще говно не функция, а говно такой подход.
Или кто-то любит юзать DDL в своей программе и создавать по таблице на сущность,
или кто-то вместо дампа SQL юзает свой код.
И то и другое говно.
Vidog 05.11.2010 11:40 # 0
utinger 24.08.2021 02:09 # 0