Говнокод на PHP

Димон

Новичок
Говнокод на PHP

Кто как говнокодит:

# 1
PHP:
if ( strlen( $string ) > 3 ) echo "Имя должно содержать не больше 3-х символов";
elseif ( strlen( $string ) < 3 ) echo "Имя должно содержать не менее 3-х символов";
else echo "Вы корректно ввели имя"
# 2
PHP:
if ( $condition ) a = 6;
a = 10;
// Подозвал прогер и спросил: "а почему у меня a всегда равно 10, даже если условие выполняется? ((("
# 3
PHP:
$int = (int) $int;
if (is_int($int)) { // на всякий случай
   // ...
}
# 4
PHP:
function newuser($username){
  return;
  /*
    ДВАДЦАТЬ СТРОК КОДА
  */
  //не пойму почему не работает: ФИО Программиста
}
# 5
PHP:
$id=mysql_escape_string(htmlspecialchars(trim(intval($_GET['id']))));
# 6

PHP:
function levelIncrease($lvl)
{
	for($i = 2, $ng = 0; $i >= 0; $i--) {
		$g = ord($lvl[$i]);
		if($i == 2)
			++$g;
		$g += $ng;
		$ng = 0;
		if($g > 57 && $g < 97)
			$g = 97;
		else if($g > 122) {
			$diff = $g - 122;
			$g = 48 + $diff - 1;
			$ng = ceil($diff / 36);
		}
		$lvl[$i] = chr($g);
		if($ng == 0)
			break;
	}
	return $lvl;
}
# 7
PHP:
ini_set('register_globals','on'); // хуй с ними.
# 8
PHP:
$var=((string)$var==(string)(int)$var)?$var:"'{$var}'";
# 9
PHP:
if (strlen(ini_get('safe_mode'))<1)
    ...
# 10
PHP:
<?php
for($i=0;$i<10;$i++) {
	for($i=0;$i<5;$i++) {
		echo 'Какого х** зацикливает!!!!!!!';
	}
}
?>
# 11
PHP:
$path = "a/b/c/d";
$sections = array_reverse (explode ("/", $path));
$sql = "SELECT `t1`.`id` FROM ";
for ($i = 1; $i <= count ($sections); $i ++)
  $from_tables[] = "`test` `t".$i."`";
$sql = $sql.implode (", ", $from_tables);
$sql .= " WHERE ";
for ($i = 1; $i < count ($sections); $i ++)
  $sql .= "`t".$i."`.`parent_id` = `t".($i+1)."`.`id` AND `t".$i."`.`name` = '".$sections[$i-1]."' AND";
$sql .= " `t".count ($sections)."`.`parent_id` = '0' AND `t".count ($sections)."`.`name` = '".$sections[count($sections)-1]."'";
echo $sql;
# 12
PHP:
if (preg_match("/^([zZ][aA]|[зЗ][аА])$/", $text)) {
		//za		
} elseif (preg_match("/^([pP][rR][oO][tT][iI][vV]|[пП][рР][оО][тТ]][иИ][вВ])$/", $text)){
# 13
PHP:
function check_email($address)
{
	$regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/';
	if (preg_match($regex, $address)) {
		return true;
	}
	else {
		return false;
	}
}
--------------------------
П.С. Самые перлы можно наблюдать в CMS Bitrix. Хвала индускому богу программирования за то, что вся эта куча говна работает :)))
 

Angerslave

Новичок
#4, например, нормальная IDE сразу обнаружит и закричит - Dead Code!
Было бы что-нибудь типа ReSharper под PHP распространено - куда меньше было бы такого... А пока многие, наверное, пишут если не в блокнотах, то и не в IDE.
 

HraKK

Мудак
Команда форума
Обьясните что тут говно ?
PHP:
$a = 2; $b = 3;
$a ^= $b ^= $a ^= $b;
echo "a = $a, b = $b";   // a = 3, b = 2
-~{}~ 19.02.09 20:41:

и это
PHP:
if (FALSE !== strpos($this->lin{$i},$this->o)) {
 

phprus

Moderator
Команда форума
HraKK
Что в PHP не знаю, но в С/С++ строчка
это undefined behaviour, так как переменные меняют свое значение дважды между точками следования(sequence points). Те теоретически в С данный код может работать как угодно.
А так как я пишу не только на PHP, но и на С и С++, то я бы и в PHP не стал-бы писать таких выражений.
 

nerezus

Вселенский отказник
triumvirat Робоцыпа смотрел? Там так один сказал праведник... и Иисус в него кинул булыжник =)
 

Активист

Активист
Команда форума
# 4
Заглушка - если функцию нужно временно отключить, что в этом такого, не пойму.

-~{}~ 20.02.09 08:28:

и
#12
тоже нормальный код
скорее всего, из СМС выдергивают ответ.
 

Angerslave

Новичок
... ступил :)

-~{}~ 20.02.09 12:38:

Кстати, в 13 ещё куда ни шло, по сравнению с этим: http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
 

AmdY

Пью пиво
Команда форума
if (FALSE !== strpos($this->lin{$i},$this->o)) {
код обретает некий тайный смысл, если строки юникод.
а ваще, производительность простого strpos по сравнению с == явно не в пользу первого

-~{}~ 20.02.09 09:01:

а в #12 если вдруг понадобится ввести дополнительно символ только прописной, это аблоговременная подготовка, которой не было в #2
 

HraKK

Мудак
Команда форума
AmdY
То есть использование любых строковых функций кроме mb_ является говнокодом? пистец я бы сказал.

а ваще, производительность простого strpos по сравнению с == явно не в пользу первого
А ахинея которую ты несешь, по сравнению с оптимизацией на милионные доли секунд не имеет равных себе. Иди читай ман по этой функции. Впечетление что ты ее никогда не юзал.
 

Духовность™

Продвинутый новичок
Посмотрел я коды и не скажу, что тут все кошмарно плохо.

Надо разделять понятия говнокода. Мне когда-то на работе старший программист дал задание, связанное с датами Mysql, которые хранились в timestamp. Надо было получить какие-то значения.

После получаса работы я написал функцию на PHP, которая давала нужный результат. Но старший программер засмеялся, когда проверял, сел возле меня и написал тоже самое, но исключительно на SQL, средствами базы.

Был ли мой код говнокодом? Нет. Он работал и выдавал нужный результат. Просто за недостатком опыта и знания возможностей базы я не сделал задачу средствами SQL.

Код говнокодом надо называть тогда, когда человек не понимает, что конкретно он пишет и как это работает:

PHP:
$id=mysql_escape_string(htmlspecialchars(trim(intval($_GET['id']))));
но код номер 11, или например "if (FALSE !== strpos($this->lin{$i},$this->o))" -- что там говняного?
 

HraKK

Мудак
Команда форума
fixxxer
А нука нука, давай-ка расскажи мне что тут
PHP:
if (FALSE !== strpos($this->lin{$i},$this->o)) {
индусского?
 

AmdY

Пью пиво
Команда форума
strpos для юникода вернёт неправильную позицию, точно так же $this->lin{$i} не даст нужного символа. ну а если не юникод, то проще сравнить
PHP:
if ($this->lin{$i} == $this->o) {
 
Сверху