1. PHP / Говнокод #1135

    +61.1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    function extCreateObject( $name, $p ) {
    		$p = array_values( $p );
    		switch ( count( $p ) ) {
    			case 0:
    				return new $name;
    			case 1:
    				return new $name( $p[0] );
    			case 2:
    				return new $name( $p[0], $p[1] );
    			case 3:
    				return new $name( $p[0], $p[1], $p[2] );
    			case 4:
    				return new $name( $p[0], $p[1], $p[2], $p[3] );
    			case 5:
    				return new $name( $p[0], $p[1], $p[2], $p[3], $p[4] );
    			case 6:
    				return new $name( $p[0], $p[1], $p[2], $p[3], $p[4], $p[5] );
    			default:
    				wfDebugDieBacktrace( "Too many arguments to constructor in extCreateObject" );
    		}
    	}

    mediawiki.org )

    Запостил: guest, 03 Июня 2009

    Комментарии (4) RSS

    • Ivan1986:
      мне как-то хватило
      $reflectionObj = new ReflectionClass($name);
      return $reflectionObj->newInstanceArgs($p);
      Ответить
    • медведь массив пришел - массив ушел
      Ответить
    • К.О.:
      ReflectionClass работает только на PHP5, а MediaWiki написана совместимой с PHP4. Так что не выделывайтесь.
      Ответить
    • Я производил тесты такой конструкции. Она оказалась в 3 раза быстрее чем call_user_func_array. Reflection еще не пробовал тестить но подозреваю, что тоже намного медленее.

      Если динамическое создание обьектов - центральная конструкция фреймворка (например dependency injection container), то оно того стоит.

      sas171
      Ответить

    Добавить комментарий