Browse Source

Fixed Reflect.callMethod() for usage with Classes as the first argument (#7106)

Alexander Kuzmenko 7 years ago
parent
commit
3d067ed66a
2 changed files with 8 additions and 7 deletions
  1. 1 1
      std/php/Boot.hx
  2. 7 6
      std/php/_std/Reflect.hx

+ 1 - 1
std/php/Boot.hx

@@ -546,7 +546,7 @@ private class HxClass {
 	**/
 	@:phpMagic
 	function __call( method:String, args:NativeArray ) : Dynamic {
-		var callback = (phpClassName == 'String' ? (cast HxString:HxClass).phpClassName : phpClassName) + '::' + method;
+		var callback = (phpClassName == 'String' ? Syntax.nativeClassName(HxString) : phpClassName) + '::' + method;
 		return Global.call_user_func_array(callback, args);
 	}
 

+ 7 - 6
std/php/_std/Reflect.hx

@@ -100,14 +100,15 @@ using php.Global;
 	}
 
 	public static function callMethod( o : Dynamic, func : Function, args : Array<Dynamic> ) : Dynamic {
-		if (Std.is(func, Closure)) {
-			if (o != null) {
-				func = cast cast(func, Closure).bindTo(o);
+		var callback:Any = func;
+		if(o != null && !Boot.isClass(o)) {
+			if (Std.is(func, Closure)) {
+				callback = (cast func:Closure).bindTo(o);
+			} else {
+				callback = Boot.castClosure(func).getCallback(o);
 			}
-			return Global.call_user_func_array(func, @:privateAccess args.arr);
-		} else {
-			return Boot.castClosure(func).callWith(o, @:privateAccess args.arr);
 		}
+		return Global.call_user_func_array(callback, @:privateAccess args.arr);
 	}
 
 	public static function fields( o : Dynamic ) : Array<String> {