Опитимизация call_user_func_array

zerkms

TDD infected
Команда форума
Опитимизация call_user_func_array

PHP:
				switch ($num_args)
				{
					case 0:
						if (in_array($method, array('open_paren', 'close_paren', 'enable_cache', 'disable_cache')))
						{
							// Should return ORM, not Database
							$this->db->$method();
						}
						else
						{
							// Support for things like reset_select, reset_write, list_tables
							return $this->db->$method();
						}
					break;
					case 1:
						$this->db->$method($args[0]);
					break;
					case 2:
						$this->db->$method($args[0], $args[1]);
					break;
					case 3:
						$this->db->$method($args[0], $args[1], $args[2]);
					break;
					case 4:
						$this->db->$method($args[0], $args[1], $args[2], $args[3]);
					break;
					default:
						// Here comes the snail...
						call_user_func_array(array($this->db, $method), $args);
					break;
				}
Неужели мифические наносекунды оправдывают этот говнокод?

(взято из kohana)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
ну, допустим, с 0 агрументов я еще могу понять... как то. Но такое... ))
 

zerkms

TDD infected
Команда форума
флоппик
да даже с нулём.

PHP:
$result = call_user_func_array(array($this->db, $method), $args);

return !$num_args ? $this : $result;
та-да :)
 

nerezus

Вселенский отказник
zerkms я первый раз полгода назад прочитал название сабжа как "какаха".

-~{}~ 13.09.09 19:32:

А так да, не стоит думать, что опенсурс не содержит говнокод.

Не битриксами и неткатами едиными ;)
 

Dreammaker

***=Ф=***
nerezus
украинцам в этом плане легче: кохана переводится как любимая..
 

Adelf

Administrator
Команда форума
Dreammaker украинцы вообще молодцы. В каждой теме о Кохане на Хабре кто-нибудь да скажет - как она переводится с украинского.

По теме: Кохану сейчас изучаю как раз. Она очень неплоха. Главное - не юзать ихний ORM :)
А если совсем по теме - да и по барабану эти копеечные оптимизации. Оно запрятано глубоко и большинству это не видно и оно почти никому не мешает - это главное.
 

nerezus

Вселенский отказник
whirlwind т.е. если говнокод проходит тесты, то в нем рациональные зерна <s>кукурузы</s> можно найти?
 

whirlwind

TDD infected, paranoid
... а, чо тут говорить. тесты проходит, знач удовлетворяет требованиям. большего надо тока педантам.
 

nerezus

Вселенский отказник
Т.е. расширяемость, укладывание проекта в сроки и т.д. - никому не нужное баловство, по твоему мнению?
 

weregod

unserializer
а я-то всё думал, откуда молодой боец в конторе, где тружусь, взял да однажды "родил" аналогичный код ;)
 

Adelf

Administrator
Команда форума
nerezus каким образом данный пример уменьшит расширяемость или не даст уложиться в срок?

Если говнокод спокойно и правильно делает свое дело и никому не мешает, то это не говнокод.
 

zerkms

TDD infected
Команда форума
Если говнокод спокойно и правильно делает свое дело и никому не мешает, то это не говнокод.
у тебя свои критерии оценки. у нас свои.
http://phpclub.ru/talk/showthread.php?postid=870330#post870330
этот код делает ту же работу и занимает 2 строки. при этом на порядки читабельнее. вердикт: в первом посте таки говнокод.
 

Major

Новичок
Все просто. Задача решена ибо была такая задача поставлена, но человек не знал про существование call_user_func_array(). Готов спорить что 98% это так и есть. Банальное незнание матчасти... Скажите автору кода про данную фичу и этот кусок будет переписан.
 

nerezus

Вселенский отказник
zerkms скорее всего ее добавил кто-то позже. А в начальных версиях там был eval.

> каким образом данный пример уменьшит расширяемость или не даст уложиться в срок?
Тут уже не пару строк. А говнокод потому, что это дублирование стандартной функции, и когда человек читает код, то ему надо потратить гораздо больше времени(часть которогшо уйдет на осознание причины "нахрена?").
 

nerezus

Вселенский отказник
zerkms ее тут нету и ты сам прекрасно это знаешь ))
А "перфоманс" был типа "о, евал медленный и плохой, давайте его в 20% случаях юзать будем".
 

zerkms

TDD infected
Команда форума
nerezus
есть :) и может быть даже в абсолютных величинах на миллионах запросов она выглядит впечатляюще.
 
Сверху