Entwickler-Ecke

Programmiersprachen (Server) - PHP Syntax, warum gibt es da keinen Fehler?


Gausi - Mo 21.02.11 22:46
Titel: PHP Syntax, warum gibt es da keinen Fehler?
Ist doch etwas viel für die SB, und das möchte ich jetzt mal wissen. :gruebel:

Ich hab da folgendes in einer Klasse:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public function Foo()
{
  return FALSE;
}
// ..
$myVar = $this->Foo;
if (!myVar) // muss natürlich heißen: if (!$myVar)
{
  echo 'Hallo Welt';
}

Warum ist sowas syntaktisch korrekt? Was macht PHP da, also wie interpretiert der das "myVar", was ja nicht "$myVar" ist? Würde ich gerne verstehen, damit die nächste Suche nach einem fehlenden $ schneller beendet ist ... :lupe:


Moderiert von user profile iconChristian S.: Topic aus Delphi4PHP-Technologien verschoben am So 15.07.2012 um 13:11


Crombo - Mo 21.02.11 23:00

Hallo,

schau dir mal mit error_reporting(E_ALL) die Notices. An. PHP nimmt da nämlich an, dass du eine Konstante auf true checkst und bekommt von der Variable gar nichts mit.

Crombo


Gausi - Mo 21.02.11 23:11

Ah, dann wird das "myVar" als Konstante angesehen, und weil die nicht definiert ist, wird die als 0 angenommen, also ist !myVar falsch, also wird das "Hallo Welt" nicht ausgegeben.

Ok, das wär dann wohl geklärt. Aber irgendwie ist mir Pascal da lieber. Da fliegt einem sowas nämlich mit ner anständigen Fehlermeldung um die Ohren. :?


Christian S. - Mo 21.02.11 23:17

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
wird die als 0 angenommen, also ist !myVar falsch
Sicher? :zwinker:

IIRC hat die Konstante myVar dann den Wert "myVar", aber ich hab's jetzt nicht nochmal nachgeguckt.


Gausi - Mo 21.02.11 23:22

Ja, kann auch gut sein. "0" wäre ja auch False, und somit !myVar wieder True. Der Wert "myVar" ist dann aber True, oder?

Ich hab mich ja manchmal über die superstrenge Typsicherheit von Delphi geärgert, aber was PHP da macht ist doch irgendwie auch Kappes ...


Dude566 - Mo 21.02.11 23:32

Einfach an die Syntax halten dann kann auch nichts passieren. :P
Ist da aber schon manchmal ärgerlich wenn man einen doofen Fehler nicht sofort entdeckt. :autsch:


Jakob_Ullmann - Sa 05.03.11 14:58

und das


Quelltext
1:
$myVar = $this->Foo;                    


nimmt er wirklich an? Wäre das nicht, wenn schon, ein Pointer auf Foo? Pointer scheint PHP ja zu kennen (lässt zumindest $this-> vermuten).


Christian S. - Sa 05.03.11 15:08

"->" entspricht dem "." in Delphi, als einfach dem Zugriff auf die Member eines Objekts.

Da fehlt IMHO aber wirklich noch ein "()" für den Funktionsaufruf.


Jakob_Ullmann - Sa 05.03.11 17:36

OK, dann habe ich das falsch erkannt, weil in C und C++ myVar->doSomething() dasselbe wie (*myvar).doSomething() ist (ich habe lange nichts mehr mit PHP gemacht und ich vermisse es auch nicht wirklich).