MediaWiki
REL1_20
|
00001 <?php 00023 class MWFunction { 00024 00030 protected static function cleanCallback( $callback ) { 00031 if( is_string( $callback ) ) { 00032 if ( strpos( $callback, '::' ) !== false ) { 00033 // PHP 5.1 cannot use call_user_func( 'Class::Method' ) 00034 // It can only handle only call_user_func( array( 'Class', 'Method' ) ) 00035 $callback = explode( '::', $callback, 2); 00036 } 00037 } 00038 00039 if( count( $callback ) == 2 && $callback[0] == 'self' || $callback[0] == 'parent' ) { 00040 throw new MWException( 'MWFunction cannot call self::method() or parent::method()' ); 00041 } 00042 00043 // Run autoloader (workaround for call_user_func_array bug: http://bugs.php.net/bug.php?id=51329) 00044 is_callable( $callback ); 00045 00046 return $callback; 00047 } 00048 00053 public static function call( $callback ) { 00054 $callback = self::cleanCallback( $callback ); 00055 00056 $args = func_get_args(); 00057 00058 return call_user_func_array( 'call_user_func', $args ); 00059 } 00060 00066 public static function callArray( $callback, $argsarams ) { 00067 $callback = self::cleanCallback( $callback ); 00068 return call_user_func_array( $callback, $argsarams ); 00069 } 00070 00076 public static function newObj( $class, $args = array() ) { 00077 if( !count( $args ) ) { 00078 return new $class; 00079 } 00080 00081 $ref = new ReflectionClass( $class ); 00082 return $ref->newInstanceArgs( $args ); 00083 } 00084 00085 }