public virtual void __construct(Context ctx, PhpValue /*string|array*/ function, PhpValue /*string|int*/ parameter) { // resolve RoutineInfo: PhpTypeInfo declaringclass = null; RoutineInfo routine = null; var function_str = function.AsString(); if (function_str != null) { routine = ctx.GetDeclaredFunction(function_str); } else { var function_arr = function.AsArray(); if (function_arr != null && function_arr.Count == 2) { declaringclass = ReflectionUtils.ResolvePhpTypeInfo(ctx, function_arr[0]); // cannot be null routine = declaringclass.RuntimeMethods[function_arr[1].ToStringOrThrow(ctx)]; } } if (routine != null) { var func = (declaringclass == null) ? (ReflectionFunctionAbstract) new ReflectionFunction(routine) : new ReflectionMethod(declaringclass, routine); // resolve parameter: var parameters = ReflectionUtils.ResolveReflectionParameters(func, routine.Methods); var pstr = parameter.AsString(); if (pstr != null) { SetParameter(parameters.First(p => p._name == pstr)); return; } else { if (parameter.IsLong(out long index) && index < parameters.Count && index >= 0) { SetParameter(parameters[(int)index]); return; } } } throw new ReflectionException(); }
/// <summary> /// Get the parameters as an array of <see cref="ReflectionParameter"/>. /// </summary> /// <returns>The parameters, as <see cref="ReflectionParameter"/> objects.</returns> public PhpArray getParameters(Context ctx) { var parameters = ReflectionUtils.ResolveReflectionParameters(ctx, this, _routine.Methods); // var arr = new PhpArray(parameters.Count); for (int i = 0; i < parameters.Count; i++) { arr.Add(PhpValue.FromClass(parameters[i])); } return(arr); }
/// <summary> /// Get the parameters as an array of <see cref="ReflectionParameter"/>. /// </summary> /// <returns>The parameters, as <see cref="ReflectionParameter"/> objects.</returns> public PhpArray getParameters(Context ctx) { var parameters = ReflectionUtils.ResolveReflectionParameters(ctx, this, _routine.Methods); // var arr = new PhpArray(parameters.Count); for (int i = 0; i < parameters.Count; i++) { Debug.Assert(!parameters[i]._isVariadic || i == parameters.Count - 1, "Variadic can be only last parameter"); arr.Add(PhpValue.FromClass(parameters[i])); } return(arr); }
/// <summary> /// Get the parameters as an array of <see cref="ReflectionParameter"/>. /// </summary> /// <returns>The parameters, as <see cref="ReflectionParameter"/> objects.</returns> public PhpArray getParameters(Context ctx) { var parameters = ReflectionUtils.ResolveReflectionParameters(ctx, this, _routine.Methods); // var arr = new PhpArray(parameters.Count); for (int i = 0; i < parameters.Count; i++) { var p = parameters[i]; arr.Add(PhpValue.FromClass(p)); if (p.isVariadic()) { break; // variadic must be the last one } } return(arr); }