__ invoke () für aufrufbares Array oder String

Wie schreibt man PHP-Code, um alle "Callables" mit @ aufzurufe__invoke()?

Der Wunsch hier ist als Referenz übergeben, die mit @ veraltet icall_user_func[_array](). Ich habe gesehen, dass es da draußen ein Paket gibt,TRex\Reflection\CallableReflection, aber dies scheint @ zu nutzcall_user_func() im Hintergrund, und würde das gleiche Problem leiden.

<?php

function passthrough_invoke(callable $callback) {
    return $callback->__invoke();
}

function passthrough_user(callable $callback) {
    return call_user_func($callback);
}

function test_func() { return "func_string\n"; };

class test_obj {

    function test_method() {
        return "obj_method\n";
    }
}
print_r("Call User Func Works:\n");
echo passthrough_user(function() { return "func_closure\n"; });
echo passthrough_user(array(new test_obj, 'test_method'));
echo passthrough_user('test_func');

print_r("\n__invoke dies:\n");
echo passthrough_invoke(function() { return "func_closure\n"; });
echo passthrough_invoke(array(new test_obj, 'test_method'));
echo passthrough_invoke('test_func');

Diese Frage könnte auch Mondlicht sein wie "Gibt es eine Möglichkeit, die nicht veraltet sein wird, dass Sie einen Rückruf mit Referenzübergabe aufrufen können?", Aber ich finde die aktuelle Frage interessanter.

Anmerkungen

Das primäre Ziel besteht darin, dass der Rückruf als vollständige Funktion fungiert und alle Feinheiten davon aufweist, vor allem Pass By Reference, das__invoke($args, ...) erlaubt

usingfunc_get_args(), oder...$args (variable Funktion auf einem Wrapper) würde nicht funktionieren, da Sie immer noch @ verwenden müsscall_user_func_array($callback, $arg_array), das Pass By Reference nicht unterstützt.

Notes 2:

Ich habe gerade erfahren, dass Sie CALL auch im nächsten PHP mit verschiedenen Parametern ausführen können:function_name(...$args). Geht diese Unterstützung über einen Verweis?

Weiter laufen wir noch auf das Thema, dass$callback_array = array($object, 'method'); ist aufrufbar, aber nicht von$callback_array(); und schon gar nicht von$callback_array(...$args);. Außerdem sollte klargestellt werden, dass es bei der Frage wirklich darum geht, Code zu schreiben, der in späteren Releases, die dies können, nicht kaputt geht.

IE: Ich kann es jetzt schreiben und morgen ausführen.

Welche sieht schwächer und schwächer aus einer Perspektive.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage