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

  • 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?
    "Mein Name ist Lohse, ich kaufe hier ein."


  • #2
    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?

    Kommentar


    • #3
      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.
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        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"); 

        Kommentar


        • #5
          Ja habs letztlich mit ner Variable gemacht, danke fuer deine Zeit.
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


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

            Kommentar


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

              Kommentar

              Lädt...
              X