Hallo,
habe kuerzlich die Signatur einer Methode nachtraeglich veraendert und wollte mit assert('func_num_args() == 0') testen, ob ich es auch nirgends vergessen habe. Schlug fehl, vermutlich weil func_num_args() im assert-Kontext ausgefuehrt wurde. Wundere mich dann allerdings, warum Konstrukte wie diese assert('$this-> ..') funktionieren, wenn der Kontext ja offenbar doch nicht ausfaellt. Moechte auch weiterhin die Bedingung per String uebergeben, da ich assert() auch performant deaktivieren koennen moechte.
Meint ihr das ist ein Bug?
Ankündigung
Einklappen
Keine Ankündigung bisher.
assert und func_num_args
Einklappen
Neue Werbung 2019
Einklappen
X
-
Ob magische Konstante oder nicht wäre doch in diesem Fall egal. Und da damit es konsistent bleibt sollte func_num_args() eine Funktion bleiben. Sonst wäre es etwas verwirrend mit func_get_arg() und func_get_args().
-
Du kannst ja mal bei der PHP Group beantragen das die daraus ne magische Konstante in PHP 6 machen...
Einen Kommentar schreiben:
-
Ja habs letztlich mit ner Variable gemacht, danke fuer deine Zeit.
Einen Kommentar schreiben:
-
Naja, es ist nicht buggy sondern wie vieles in PHP schlecht ausgedrückt. Man hätte hierfür eine magische Konstante nehmen müssen, denn func_num_args verhält sich exakt so:
PHP-Code:function blubb()
{
echo assert('__FUNCTION__ == "blubb"'); // fail
echo assert(__FUNCTION__.' == "blubb"'); // ok
echo assert('func_num_args() == 2'); // fail
echo assert(func_num_args().' == 2'); // ok
}
blubb("hi","there");
Einen Kommentar schreiben:
-
Finde das Verhalten trotzdem buggy, da assert() ja einen Spezialkontext einnimmt. Kann diesen Handbuchtext eigentlich nur als Ausrede fuer technische Probleme interpretieren. Warum sollte ich die Funktion nicht als Funktionsparameter nutzen koennen, Parameter werden ja vor dem Aufruf der Funktion verpackt, also bin ich ja noch in keinem fremden Ausfuehrungskontext. Strange, trotzdem danke, kannte den Text zwar schon, aber in dem Zusammenhang hatte ich das nicht mehr gebracht.
Einen Kommentar schreiben:
-
Zitat von http://de2.php.net/manual/de/function.func-num-args.phpHinweis: Da diese Funktion bei der Ermittlung der Parameterdetails von dem aktuellen Ausführungskontext abhängt kann sie selbst nicht als Funktionsparameter genutzt werden. Wenn Sie ihre Ergebnisse tatsächlich weitergeben müssen so müssen Sie diese zunächst an eine Variable zuweisen und dann diese Variable übergeben
Einen Kommentar schreiben:
Einen Kommentar schreiben: