Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Notice "undefined variable" unterdrücken bei

Einklappen

Neue Werbung 2019

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

  • PHP Notice "undefined variable" unterdrücken bei

    Ich frage in einer Klasse einige Properties per __get() ab.
    Wenn der Parameter nicht existiert werfe ich eine Exception.

    Leider nervt PHP trotzdem mit einer Undefined variable Notice, wenn __get() keinen return-Wert zurückgibt.

    Kann man das irgendwie umgehen?

    Vielen Dank
    Gruß, Dave

  • #2
    Du prüfst nicht richtig. Versuchs mal mit isset()...

    Kommentar


    • #3
      Zitat von D@ve Beitrag anzeigen
      Ich frage in einer Klasse einige Properties per __get() ab.
      Der Satz ist mir mich etwas unverständlich. Die magische Methode __get() wird ja nur aufgerufen, wenn du auf Eigenschaften (Properties) zugreifst die nicht existieren oder non Public sind. Zeig mal etwas Code.

      Kommentar


      • #4
        Sorry... ja klar, geht um non-public Properties

        PHP-Code:
        <?php 
        namespace dave\userdelete\includes;

        /**
        *  Class for constants
        *  @property-read string $DELETE_PROFILE_MODE_BAN 
        *  @property-read string $DELETE_PROFILE_MODE_ANONYMIZE
        *  @property-read string $DELETE_PROFILE_MODE_COMPLETE
        *  @property-read string USER_DELETE_TABLE
        */
        class constants
        {
            
        //Constants:
            
        protected $DELETE_PROFILE_MODE_BAN 1;
            protected 
        $DELETE_PROFILE_MODE_ANONYMIZE 2;
            protected 
        $DELETE_PROFILE_MODE_COMPLETE 3;     
            
            public function 
        __get($name_STR)
            {
                
        //check if the parameter exist and return it  
                
        if (isset($this->$$name_STR))
                {
                    return $
        $name_STR;
                }
                
        //otherwise throw an exception:
                
        else
                {
                    throw new  \
        dave\userdelete\exceptions\invalid_constant_exception('Invalid Constant: ' $name_STR);
                }
            }
        }

        Kommentar


        • #5
          Versuchs mal so:
          PHP-Code:
                  if (isset($this->$name_STR))
                  {
                      return 
          $this->$name_STR;
                  } 

          Kommentar


          • #6
            Ah... peinlich... Das wars... Zwei Dollarzeichen nach $this waren auch sinnfrei (interessant nur, dass es überhaupt funktioniert hat).

            Vielen Dank

            Kommentar


            • #7
              Zitat von D@ve Beitrag anzeigen
              Zwei Dollarzeichen nach $this waren auch sinnfrei (interessant nur, dass es überhaupt funktioniert hat).
              In diesem Kontext war das vielleicht sinnfrei, aber du solltest dir "variable Variablen" mal ansehen
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Ist mir bekannt... Habe ich da ja auch oben benutzt. Nur im Objektkontext ist $this->$foo eben die korrekte Syntax... und nicht $this->$$foo Das hätte eigentlich garnicht funktionieren dürfen.

                Kommentar


                • #9
                  $this->$$foo Das hätte eigentlich garnicht funktionieren dürfen.
                  Warum nicht? Mal abgesehen davon, das eventuell eine nicht vorhandene Property angesprochen werden würde, ist es syntaktisch korrekter Code.
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Warum nicht?
                    Weil ich im Prinzip eine Dreifachverschatelung gemacht habe...

                    Also außerhalb eines Objektes wäre das sowas in der Art
                    PHP-Code:
                    $blubb '';
                    $bla 'blubb';
                    $test 'bla';
                    $blubb = $$$test
                    Mir ist klar, warum dadurch eine Notice entstanden ist. Weil die Variable logischerweise nicht existiert. Aber ich verstehe nicht warum der Code funktioniert hat.

                    das eventuell eine nicht vorhandene Property angesprochen
                    Ja, aber es wurde trotzdem der Wert der vorhandenen Property zurückgegeben...

                    Aber naja... Es funktioniert... Man muss nicht alles verstehen.

                    Kommentar

                    Lädt...
                    X