php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 11-02-2007, 16:23
MaxPayne
 Member
Links : Onlinestatus : MaxPayne ist offline
Registriert seit: Jul 2002
Ort: Stadtilm
Beiträge: 359
MaxPayne ist zur Zeit noch ein unbeschriebenes Blatt
MaxPayne eine Nachricht über ICQ schicken
Standard [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
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 11-02-2007, 18:31
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #3 (permalink)  
Alt 11-02-2007, 19:02
Shurakai
 Master
Links : Onlinestatus : Shurakai ist offline
Registriert seit: May 2004
Ort: Bergisch Gladbach
Beiträge: 3.084
Shurakai ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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.
Mit Zitat antworten
  #4 (permalink)  
Alt 11-02-2007, 19:21
MaxPayne
 Member
Links : Onlinestatus : MaxPayne ist offline
Registriert seit: Jul 2002
Ort: Stadtilm
Beiträge: 359
MaxPayne ist zur Zeit noch ein unbeschriebenes Blatt
MaxPayne eine Nachricht über ICQ schicken
Standard

Zitat:
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.
Mit Zitat antworten
  #5 (permalink)  
Alt 11-02-2007, 21:15
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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'
Mit Zitat antworten
  #6 (permalink)  
Alt 11-02-2007, 21:48
MaxPayne
 Member
Links : Onlinestatus : MaxPayne ist offline
Registriert seit: Jul 2002
Ort: Stadtilm
Beiträge: 359
MaxPayne ist zur Zeit noch ein unbeschriebenes Blatt
MaxPayne eine Nachricht über ICQ schicken
Standard

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...
Mit Zitat antworten
  #7 (permalink)  
Alt 11-02-2007, 21:50
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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->"?
Mit Zitat antworten
  #8 (permalink)  
Alt 11-02-2007, 21:59
MaxPayne
 Member
Links : Onlinestatus : MaxPayne ist offline
Registriert seit: Jul 2002
Ort: Stadtilm
Beiträge: 359
MaxPayne ist zur Zeit noch ein unbeschriebenes Blatt
MaxPayne eine Nachricht über ICQ schicken
Standard

Zitat:
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...
Mit Zitat antworten
  #9 (permalink)  
Alt 11-02-2007, 22:00
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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

Zitat:
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.
Mit Zitat antworten
  #10 (permalink)  
Alt 11-02-2007, 22:18
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ist auch extrem sinnlos, aber da es mit normalen Variablen auch ohne vorige Deklaration funktioniert wurde das mit den Klassen-Properties genauso gehandhabt ~
Mit Zitat antworten
  #11 (permalink)  
Alt 11-02-2007, 22:28
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von MaxPayne
PHP ist wirklich dreckig...
und darum mag ich es
Mit Zitat antworten
  #12 (permalink)  
Alt 11-02-2007, 22:33
MaxPayne
 Member
Links : Onlinestatus : MaxPayne ist offline
Registriert seit: Jul 2002
Ort: Stadtilm
Beiträge: 359
MaxPayne ist zur Zeit noch ein unbeschriebenes Blatt
MaxPayne eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von 3DMax
und darum mag ich es
Und die Hacker auch...
Mit Zitat antworten
  #13 (permalink)  
Alt 11-02-2007, 23:05
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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.
Mit Zitat antworten
  #14 (permalink)  
Alt 11-02-2007, 23:09
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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.
Mit Zitat antworten
  #15 (permalink)  
Alt 11-02-2007, 23:16
MaxPayne
 Member
Links : Onlinestatus : MaxPayne ist offline
Registriert seit: Jul 2002
Ort: Stadtilm
Beiträge: 359
MaxPayne ist zur Zeit noch ein unbeschriebenes Blatt
MaxPayne eine Nachricht über ICQ schicken
Standard

Zitat:
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.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

Microweber CMS

Open source, drag and drop website builder

13.01.2020 Berni | Kategorie: HTML5/ EDITOR
PhoneGap Apps mit JS, CSS3 und HTML5 erstellen ansehen PhoneGap Apps mit JS, CSS3 und HTML5 erstellen

PhoneGap, Framework zur Erstellung hybrider Applikationen für mobile Endgeräte.

13.01.2020 Berni | Kategorie: App-Entwicklung
Bo)Tickets

Bo)Tickets bietet Ihnen eine Schnittstelle für Kundenanfragen an. In dem Script definieren Sie Supportbereiche, also zum Beispiel „Technik, Buchhaltung, Support“. Ihre Kunden können dann über ein Formular eine Anfrage abschicken.

31.12.2019 bocombo | Kategorie: PHP/ Ticketsystem
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:17 Uhr.