Ankündigung

Einklappen
Keine Ankündigung bisher.

assert und func_num_args

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Chriz
    hat ein Thema erstellt assert und func_num_args.

    assert und func_num_args

    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?

  • Flor1an
    antwortet
    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().

    Einen Kommentar schreiben:


  • cycap
    antwortet
    Du kannst ja mal bei der PHP Group beantragen das die daraus ne magische Konstante in PHP 6 machen...

    Einen Kommentar schreiben:


  • Chriz
    antwortet
    Ja habs letztlich mit ner Variable gemacht, danke fuer deine Zeit.

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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:


  • Chriz
    antwortet
    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:


  • cycap
    antwortet
    Zitat von http://de2.php.net/manual/de/function.func-num-args.php
    Hinweis: 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
    Beantwortet das deine Frage?

    Einen Kommentar schreiben:

Lädt...
X