MediaWiki  REL1_20
MWFunction.php
Go to the documentation of this file.
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 }