- 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;
}
Вроде все хорошо и красиво. Но есть говнинка которая все портит
{
$retval = true;
}
нет вот это . Не пойму зачем я код этого юноши просматриваю вроде и код нормальный а встречаются вот такие вещи и все сразу портит.
Или возможно я ещё не достиг высшего уровня мастерства в программировании, поведай пожалуйста?
Можно было конечно обойтись без этой переменной и сделать return $result;
Я правило все понял?
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;
}
- наф плодить лишние переменные, которые не используются?..
- да и ветка "else" по сути не нужна; но это на любителя...
Тогда почему у человека две ноздри ?
Нос человека выполнен согласно MISC архитектуре, а в данном примере только RISC
а Вот анус это точка выхода и он один. (всяких педерастов не рассматриваю)
use анус;
ob_end_flush();
?>
помимо ануса есть ещё и уретра
хотя есть и другая функция... но о ней речь не идёт =)
с точки зрения интерпретатора Несколько точек выхода не ухудшат производительность и даже наоборот: не придётся выполнять ненужные жампы на конец функции, чтобы выполнить жамп выхода из функции...
с точки зрения нуба(паскалист, школоло, и т.п.):
- несколько точек выхода заставляет напрягать мозг... и "трудно" разобраться в коде...
и правда,- лазить по всем ветвлениям, что куда пошло -- гораздо читабельнее чем "не устраивает -- пшол на ret"...
Причем тут ошибка в профессии?
В любом деле могут быть как простые, так и сложные моменты.
Вообще в современном мире она МОЖЕТ БЫТЬ нужна только в особых случаях: драйверы, и прочий код режима ядра, ядра каких-то крутых СУБД (типа оракл), системы для обработки гигантских массивов данных (типа поисковых машин гугла и яндекса) и иже с ними.
В PHP она не нужна. Так что код PHP в первую очередь должен быть читаемым.
Так что если код на PHP прочитать трудно -- значит автор кода скорее всего плохой программист, ага))
Конечно можно представить себе что на PHP люди реализовывают сложный алгоритм, для понимания которого нужно быть доктором наук -- тогда конечно разговор особый.
Но такие случаи крайне редки)
но жертвовать оптимизацией глупо в любом случае... даже в столь унылом гавне как пхп...
должен быть баланс между читабельностью и оптимальностью...
---------------------------------------
но речь была даже не о том...
- речь была о "Н-ное количество выходов из функции == плоха"...
на самом деле это спорно.
Как бы Вы переписали эту функцию? (извините за синтаксис -- пых я подзабыл)
а в пользовательском коде:
Работа с базой почти всегда является узким местом PHP приложений.
Так что там можно пожертвовать читаемостью
а вообще глупая функция, что она именно сделала невозможно понять по результатам возвращаемого значения
Я вам ещё раз повторю свою мысль. Обратите внимание на то, что функция называется createTable. И нормальное для неё поведение - возвращать true - если таблица создана, если false, если не создана. Согласно коду логика другая. О чём я и сказал выше.
Если совсем непонятно - простой пример:
у вас есть метод find который ищет записи по id, например посты. Нормальное для него поведение - возвращать пост или null/false в случае если пост не был найден. А теперь мы добавили в метод логику, согласно которой, если пост не найден, то метод будет возвращать пустой объект Post. А сам метод не переименуем. Вот такого же рода бред в и функции. Название не соответствует действиям.
Вы еще предложите коды ошибок возвращать.
В php может и не актуально. А когда дело стоит за производительностью -
лучше код ошибки, чем исключение.
>>лучше код ошибки, чем исключение.
Да, во многих средах исключения действительно хуже по производительности, чем код ошибки.
Но если Вы не собираетесь бросать over 1K исключений в секунду -- врядли Вы заметите от них хоть какой-то урон.
Ну а для PHP эито правда не актуально
Не обязательно их вообще даже генерировать пользователю.
Сами библиотеки, которые поддерживают исключения более медленные, чем их
свободные от исключений аналоги.
2) if($result){ ...
не проверяет создана ли таблица, а проверяет только прошел ли запрос к БД.
КО.
$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 )");
}
Ну или как то так в любом случае ошибка не осталось не замеченной а тут. Получилось хорошо не получилось ну и ладно потом про пыху и говорят плохо.
не ?
Тащемта, там абсолютно не нужны retval & result
как там все нормально или были проблемы.
вообще-то можно и вообще не плодить переменные...
- обработка ошибок по свичу или там какое-то логирование...
а если тебе нужно просто "да/нет", которое тут же и возвращается из функции, то плодить переменные нету смысла (это влечет за собою лишнюю нагрузку на сервер, пускай и незначительную, но такие задержки накапливаются по всему скрипту)
А вообще говно не функция, а говно такой подход.
Или кто-то любит юзать DDL в своей программе и создавать по таблице на сущность,
или кто-то вместо дампа SQL юзает свой код.
И то и другое говно.