- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
switch(count($Args)) {
case 0:
$Result = new $ClassName; break;
case 1:
$Result = new $ClassName($Args[0]); break;
case 2:
$Result = new $ClassName($Args[0], $Args[1]); break;
case 3:
$Result = new $ClassName($Args[0], $Args[1], $Args[2]); break;
case 4:
$Result = new $ClassName($Args[0], $Args[1], $Args[2], $Args[3]); break;
case 5:
$Result = new $ClassName($Args[0], $Args[1], $Args[2], $Args[3], $Args[4]); break;
case 6:
$Result = new $ClassName($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5]); break;
case 7:
$Result = new $ClassName($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6]); break;
case 8:
$Result = new $ClassName($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6], $Args[7]); break;
default:
throw new Exception();
}
Взято из форума Vanilla 2...
И еще в одном файле подобное library/core/class.dispatcher.php (со строки 267).
if ($Count == 0) {
$Controller->$ControllerMethod();
} else if ($Count == 1) {
$Controller->$ControllerMethod($Args[0]);
} else if ($Count == 2) {
$Controller->$ControllerMethod($Args[0], $Args[1]);
} else if ($Count == 3) {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2]);
} else if ($Count == 4) {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2], $Args[3]);
} else if ($Count == 5) {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2], $Args[3], $Args[4]);
} else if ($Count == 6) {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5]);
} else if ($Count == 7) {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6]);
} else if ($Count == 8) {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6], $Args[7]);
} else if ($Count == 9) {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6], $Args[7], $Args[8]);
} else {
$Controller->$ControllerMethod($Args[0], $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6], $Args[7], $Args[8], $Args[9]);
}
Это из class.dispatcher.php.
class A {
private function __construct($args) { /* тут обрабатываем массив аргументов */ }//конструктор прайвит - то есть извне объект создать не получится.
public static function factory() {
$args = func_get_args();
return new A($args);
}
}
$b = A::factory($a1, $a2, $a3);
Без смены API первоначальный код оптимизировать никак?
а что будет если ненужным параметрам присваивать null?
Понятно, это всего лишь микрооптимизация.
Сейчас там вместо этого косяка:
Но подобные косяки можно встретить и вдругих местах: library/core/class.factory.php L:195
И тут для специально для "исследователей" говнокода, тоже оставили комментарий:
шедевр непонимания назначения исключений. Так вот ты какое -- юзание современных технологий в пыхе