* Create an object with a given name and an array of construct parameters
* @param $name String
* @param $p Array: parameters
+ * @deprecated
*/
function wfCreateObject( $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:
- throw new MWException( 'Too many arguments to construtor in wfCreateObject' );
- }
+ return MWFunction::newObj( $name, $p );
}
function wfHttpOnlySafe() {
}
- public static function callArray( $callback, $params ) {
+ public static function callArray( $callback, $argsarams ) {
$callback = self::cleanCallback( $callback );
- return call_user_func_array( $callback, $params );
+ return call_user_func_array( $callback, $argsarams );
+
+ }
+
+ public static function newObj( $class, $args = array(), $force_fallback = false ) {
+ if( !count( $args ) ) {
+ return new $class;
+ }
+
+ if ( version_compare( PHP_VERSION, '5.1.3', '<' ) || $force_fallback ) {
+
+ //If only MW needed 5.1.3 and up... sigh
+
+ $args = array_values( $args );
+ switch ( count( $args ) ) {
+ case 0:
+ return new $class;
+ case 1:
+ return new $class( $args[0] );
+ case 2:
+ return new $class( $args[0], $args[1] );
+ case 3:
+ return new $class( $args[0], $args[1], $args[2] );
+ case 4:
+ return new $class( $args[0], $args[1], $args[2], $args[3] );
+ case 5:
+ return new $class( $args[0], $args[1], $args[2], $args[3], $args[4] );
+ case 6:
+ return new $class( $args[0], $args[1], $args[2], $args[3], $args[4], $args[5] );
+ case 7:
+ return new $class( $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6] );
+ case 8:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7]
+ );
+ case 9:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7], $args[8]
+ );
+ case 10:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7], $args[8], $args[9]
+ );
+ case 11:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7], $args[8], $args[9], $args[10]
+ );
+ case 12:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7], $args[8], $args[9], $args[10], $args[11]
+ );
+ case 13:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7], $args[8], $args[9], $args[10], $args[11], $args[12]
+ );
+ case 14:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7], $args[8], $args[9], $args[10], $args[11], $args[12], $args[13]
+ );
+ case 15:
+ return new $class(
+ $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6],
+ $args[7], $args[8], $args[9], $args[10], $args[11], $args[12], $args[13],
+ $args[14]
+ );
+ default:
+ throw new MWException( 'Too many arguments to construtor in MWFunction::newObj' );
+ }
+ }
+
+ else {
+
+ $ref = new ReflectionClass($class);
+ return $ref->newInstanceArgs($args);
+ }
}
function testCallUserFuncWorkarounds() {
$this->assertEquals(
- MWFunction::call( 'MWFunctionTest::someMethod' ),
- call_user_func( array( 'MWFunctionTest', 'someMethod' ) )
+ call_user_func( array( 'MWFunctionTest', 'someMethod' ) ),
+ MWFunction::call( 'MWFunctionTest::someMethod' )
);
$this->assertEquals(
- MWFunction::call( 'MWFunctionTest::someMethod', 'foo', 'bar', 'baz' ),
- call_user_func( array( 'MWFunctionTest', 'someMethod' ), 'foo', 'bar', 'baz' )
+ call_user_func( array( 'MWFunctionTest', 'someMethod' ), 'foo', 'bar', 'baz' ),
+ MWFunction::call( 'MWFunctionTest::someMethod', 'foo', 'bar', 'baz' )
);
$this->assertEquals(
- MWFunction::callArray( 'MWFunctionTest::someMethod', array() ),
- call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array() )
+ call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array() ),
+ MWFunction::callArray( 'MWFunctionTest::someMethod', array() )
);
$this->assertEquals(
- MWFunction::callArray( 'MWFunctionTest::someMethod', array( 'foo', 'bar', 'baz' ) ),
- call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array( 'foo', 'bar', 'baz' ) )
+ call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array( 'foo', 'bar', 'baz' ) ),
+ MWFunction::callArray( 'MWFunctionTest::someMethod', array( 'foo', 'bar', 'baz' ) )
+ );
+
+ }
+
+ function testNewObjFunction() {
+
+ $arg1 = 'Foo';
+ $arg2 = 'Bar';
+ $arg3 = array( 'Baz' );
+ $arg4 = new ExampleObject;
+
+ $args = array( $arg1, $arg2, $arg3, $arg4 );
+
+ $newObject = new MWBlankClass( $arg1, $arg2, $arg3, $arg4 );
+
+ $this->assertEquals(
+ MWFunction::newObj( 'MWBlankClass', $args )->args,
+ $newObject->args
+ );
+
+ $this->assertEquals(
+ MWFunction::newObj( 'MWBlankClass', $args, true )->args,
+ $newObject->args,
+ 'Works even with PHP version < 5.1.3'
);
}
}
+class MWBlankClass {
+
+ public $args = array();
+
+ function __construct( $arg1, $arg2, $arg3, $arg4 ) {
+ $this->args = array( $arg1, $arg2, $arg3, $arg4 );
+ }
+
+}
+
+class ExampleObject {
+}