- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
/**
* Returns the number of rows affected by the last query
*
* @return int
*/
public function getAffectedRowCount($result)
{
return mysqli_affected_rows($this->getDatabase());
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+155
/**
* Returns the number of rows affected by the last query
*
* @return int
*/
public function getAffectedRowCount($result)
{
return mysqli_affected_rows($this->getDatabase());
}
SugarCRM. Стоит от $35/месяц на одного пользователя.
Понимаю когда такое встречатеся в стартапах, но когда ты просишь за свой продукт деньги и деньги не малые, то выпускать такое в продакшен... Лично я бы постеснялся.
mr.The 27.05.2014 15:21 # 0
bormand 27.05.2014 16:48 # +2
Vasiliy 27.05.2014 16:52 # +1
bormand 27.05.2014 16:55 # +2
А может быть это одна из реализаций абстрактного метода, а в какой-то другой из них этот $result используется? В таком случае неиспользуемая переменная - вполне норм.
VanSanblch 27.05.2014 20:44 # 0
Проект вообще "славится" тем что на вывод ошибок нужно отключать не только на продакшене, но и на деве. Иначе всё засирается нотисами, варнингами и стриктами.
guest 27.05.2014 23:20 # +1
Vasiliy 28.05.2014 11:14 # 0
VanSanblch 28.05.2014 11:19 # 0
bormand 28.05.2014 13:37 # +1
Да ну? Если бы это был абстрактный метод, то в одной из его реализаций так делать не стоит (в самом интерфейсе - можно). Нарушение контракта интерфейса/базового класса и все такое: потом получится, что никто не передает туда $result, а одной из СУБД он нужен.
Либо выпилить параметр из интерфейса вообще. Либо он должен быть везде. Либо все реализации должны нормально работать, если им не передали $result'а.
bormand 28.05.2014 13:47 # 0
В общем как-то так:
1) В интерфейсе написано foo($result). Реализации имеют полное право не юзать его. Вызывающие обязаны передавать, т.к. какой-то из реализаций он может понадобиться.
2) В интерфейсе написано foo($result=''). Реализации обязаны нормально работать с пустым $result'ом, т.к. его могут не передать. Вызывающий имеет полное право его не передавать.
Все остальные варианты, к примеру, foo($result) в интерфейсе и foo($result='') в реализации - сраное говно, с которым ты рано или поздно прострелишь себе ногу.
Vasiliy 28.05.2014 14:08 # 0
Но заставлять пользователя класса передавать параметр "что бы было" никуда не годится.
bormand 28.05.2014 14:23 # 0
1) Программисты написали тонны кода, которые foo() юзали не передавая параметр (влом же, да и интерфейс позволяет).
2) Появилась реализация, которой $result все-таки нужен, и он без нее никак жить не может (ну СУБД, например, такая попалась, что без result'а не может вернуть статистику).
3) Кто-то попытался поюзать код из 1 с реализацией из 2 - кровь-кишки-распидорасило.
Что делать будем в такой ситуации? :)
P.S.Само собой, что getAffectedRowCount() - функция чисто информационная, и даже если она вернет 0 - всем похуй. Так что пример рассматриваем на более важной функции, без которой ничего работать не будет.
Vasiliy 28.05.2014 14:50 # 0
if (!$result instaceof ResultClass)
throw new Exception('Дайте $result суки!!!1');
bormand 28.05.2014 15:08 # 0
Отличное решение! Теперь юзеры твоего продукта матерятся, что большая часть модулей (купленных ими у сторонних разрабов) не работает с новой базой. Что делаем дальше?
Vasiliy 28.05.2014 15:44 # 0
bormand 28.05.2014 15:58 # 0
WHAT!? Не реализации же, а модули, которые юзали твой интерфейс с foo($result). Они забивали на передачу аргумента, т.к. твоя дока сказала им, что это не обязательно. Они доверяли твоему интерфейсу, пообещавшему им, что он не будет падать, если $result не передать... А теперь на одной из новых СУБД все эти модули тупо не работают, падая с ошибкой... И твое решение - отказаться от этой СУБД, и тупо ее не прикручивать...
А все из-за того, что автор интерфейса решил сэкономить вызывающим десяток символов...
В общем и целом: если ты видишь в интерфейсе ненужные аргументы - это может оказаться не говном, а заделом на будущее. Да и вдруг автор уже знает о базе, где ему этот $result пригодится, просто до ее поддержки руки еще не дошли?
P.S. И именно поэтому разработка качественных интерфейсов - это самая сложная и ответственная задача для разраба.
eth0 27.05.2014 19:35 # 0
VanSanblch 27.05.2014 20:45 # 0
shindjii 28.05.2014 01:40 # +1
roman-kashitsyn 28.05.2014 09:49 # +3
Ты думаешь почему всяческие менеджеры так любят говнокодеров?
shindjii 28.05.2014 09:53 # −3
eth0 28.05.2014 19:46 # 0
bormand 28.05.2014 19:51 # 0
Удаление файлов с вероятностью 1.0/RAND_MAX... Беспощадно, но очень маловероятно.
bormand 29.05.2014 07:11 # 0
absolut 29.05.2014 09:27 # 0
Преимущество
guest 31.05.2014 10:13 # 0