[PHP5] Warum keine Fehlermeldung?

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

  • [PHP5] Warum keine Fehlermeldung?

    Hallo,

    ich habe den folgenden Code einer größeren Klasse:

    PHP-Code:
    class RentalCompany
    {
        protected 
    $fleet = array();
        protected 
    $rentalActions = array();
        
        public function 
    addToFleet($idVehicle $vehicle)
        {
            
    $this->vehicles[$id] = $vehicle;
        }

    Bei der Verwendung der Klasse, fiel mir auf, dass trotz des Hinzufügen eines Vehicle-Objekts via addToFleet() kein entsprechender Eintrag in dem dafür vorgesehenen Array $fleet hinzugefügt worden war. Der Fehler ist natürlich ganz trivial, ich habe einfach einen falschen Variablennamen in addToFleet verwendet, nämlich $this->vehicles statt $this->fleet.

    Meine Frage nun: warum gibt PHP trotz error_reporting = 4095 (E_ALL | E_STRICT) keine Fehlermeldung oder zumindest eine Warnung aus, beim Zugriff auf eine nicht definierte Objektvariable aus, wie in diesem Fall? Mit einer solchen hätte sich der Fehler relativ leicht finden lassen.

    PS: Ich habe keine Überladungsmethoden definiert

  • #2
    es gibt keine fehlermeldung, da die variable $this->vehicles[$id] eben difiniert und gleichzeitig initialisiert wurde.
    Also das ist ganz normales Verhalten bei php.
    Slava
    bituniverse.com

    Kommentar


    • #3
      Original geschrieben von Slava
      es gibt keine fehlermeldung, da die variable $this->vehicles[$id] eben difiniert und gleichzeitig initialisiert wurde.
      Also das ist ganz normales Verhalten bei php.
      Das sollte eigentlich nicht normal sein, weil du mit $this->vehicles ein Klassenattribut ansprichst, dass es in der Klasse garnicht gibt. Bei normalen Variablen wäre es aber was anderes.
      Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
      var_dump(), print_r(), debug_backtrace und echo.
      Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
      Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
      Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

      Kommentar


      • #4
        Original geschrieben von Slava
        es gibt keine fehlermeldung, da die variable $this->vehicles[$id] eben difiniert und gleichzeitig initialisiert wurde.
        Also das ist ganz normales Verhalten bei php.
        Guten Morgen Herr Müller, Klassenvariablen können nur innerhalb von von class {} definiert werden und dass ich kein Overloading anwende habe ich im Post Scriptum auch geschrieben.

        Kommentar


        • #5
          Original geschrieben von MaxPayne
          Guten Morgen Herr Müller, Klassenvariablen können nur innerhalb von von class {} definiert werden und dass ich kein Overloading anwende habe ich im Post Scriptum auch geschrieben.
          und was ist jetzt unklar, so wie es slava geschrieben hat, ist es richtig.
          das ganze hat auch nichts mit klassen zu tun, das hier läuft auch ohne notices, da php $foo zur laufzeit als array definiert:
          PHP-Code:
          error_reporting(E_ALL);
          //$foo=array();
          $foo[1]='bar'

          Kommentar


          • #6
            Doch, es hat etwas mit Klassen zu tun.
            Wo liegt der Sinn innerhalb einer Klasse, also mitten im Code von Methoden eine Klassenvariable über $this zu definieren, wenn ich dies eigentlich innerhalb von class {} mit Hilfe der Sichtbarkeitsmodifikatoren tun sollte?
            Und welche Sichtbarkeit hat diese ad-hoc definierte und initialisierte Variable dann? Ist doch völlig sinnlos sowas zu erlauben...

            Kommentar


            • #7
              Original geschrieben von Shurakai
              Das sollte eigentlich nicht normal sein, weil du mit $this->vehicles ein Klassenattribut ansprichst, dass es in der Klasse garnicht gibt. Bei normalen Variablen wäre es aber was anderes.
              und wo ist dabei der unterschied, mal abgesehen vom "$this->"?

              Kommentar


              • #8
                Original geschrieben von 3DMax
                und wo ist dabei der unterschied, mal abgesehen vom "$this->"?
                Weil Klassenattribute AUßERHALB von Methoden definiert werden, beispielsweise so:

                PHP-Code:
                protected $vehicles = array(); 
                Was ist daran so schwer zu verstehen? Eine Klasse besteht aus Eigenschaften und Methoden; die Eigenschaften werden definiert und mit einer Sichtbarkeit versehen und die Methoden benutzen sie, bzw. können sie verändern. Es gibt überhaupt keinen Grund zu erlauben, dass innerhalb von Methoden Klassenvariablen definiert werden können.
                Mal ganz abgesehen von der Lesbarkeit von solchem Code, kann man dabei zum Beispiel in die Situation geraten, dass man die Existenz einer Klassenvariable voraussetzt, die aber tatsächlich noch gar nicht existiert, weil die Methode, die sie überhaupt erst _definiert_ noch gar nicht aufgerufen wurde...und noch ganz andere Horrorszenarien...

                PHP ist wirklich dreckig...

                Kommentar


                • #9
                  Original geschrieben von MaxPayne
                  Wo liegt der Sinn innerhalb einer Klasse, also mitten im Code von Methoden eine Klassenvariable über $this zu definieren, wenn ich dies eigentlich innerhalb von class {} mit Hilfe der Sichtbarkeitsmodifikatoren tun sollte?
                  frag mich nicht, ich habe php nicht entwickelt

                  Und welche Sichtbarkeit hat diese ad-hoc definierte und initialisierte Variable dann? Ist doch völlig sinnlos sowas zu erlauben...
                  per default sind alle class-members public. ich gebe dir recht.

                  Kommentar


                  • #10
                    Ist auch extrem sinnlos, aber da es mit normalen Variablen auch ohne vorige Deklaration funktioniert wurde das mit den Klassen-Properties genauso gehandhabt ~

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Original geschrieben von MaxPayne
                      PHP ist wirklich dreckig...
                      und darum mag ich es

                      Kommentar


                      • #12
                        Original geschrieben von 3DMax
                        und darum mag ich es
                        Und die Hacker auch...

                        Kommentar


                        • #13
                          Original geschrieben von MaxPayne
                          Und die Hacker auch...
                          möchtest du jetzt gegen php flamen, wie im heise-forum üblich?
                          zugegeben, dein o.g. fehler ist schlecht auszumachen, aber die meisten (fast alle) schwachstellen von gehackten php-applikationen liegen eindeutig bei den entwicklern und nicht im php-core.
                          werte von außen sind potentiell böse und müssen grundsätzlich validiert werden. meist werden get/post-werte ohne überprüfung includet (url-wrapper) oder als db-abfrage benutz, eval ist oft auch evil.
                          ich fahre jedoch mit php ganz gut.

                          Kommentar


                          • #14
                            Original geschrieben von 3DMax
                            aber die meisten (fast alle) schwachstellen von gehackten php-applikationen liegen eindeutig bei den entwicklern und nicht im php-core.
                            OffTopic:
                            Das Interview mit Stefan Esser bei SecurityFocus ist ziemlich interessant ...
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Original geschrieben von 3DMax
                              möchtest du jetzt gegen php flamen, wie im heise-forum üblich?
                              zugegeben, dein o.g. fehler ist schlecht auszumachen, aber die meisten (fast alle) schwachstellen von gehackten php-applikationen liegen eindeutig bei den entwicklern und nicht im php-core.
                              werte von außen sind potentiell böse und müssen grundsätzlich validiert werden. meist werden get/post-werte ohne überprüfung includet (url-wrapper) oder als db-abfrage benutz, eval ist oft auch evil.
                              ich fahre jedoch mit php ganz gut.
                              Standardgequatsche, das hat überhaupt nichts mit dem Thema zu tun. Hier geht es um ein Sprachkonzept und wie es mir das Leben schwer macht, mit solch unsinnigen Prinzipien, vor denen nicht mal gewarnt wird, wenn man den höchsten Debugging-Modus einschaltet.

                              Und genau solche Prinzipien sind es, die so viele "tolle" PHP-Entwickler hervorgebracht haben.

                              Kommentar

                              Lädt...
                              X