Doppelte Unterstriche

visiondpc

Erfahrenes Mitglied
Hi,

ich hab da mal eine kleine Verständnissfrage.
Mir ist in letzter Zeit aufgefallen, das einige PHP-Entwickler beim definieren einiger Funktionen und Konstanten dem Funktions- bzw. Konstantennamen zwei Unterstriche voranstellen oder anhängen ähnlich wie bei den in PHP vordefinierten Konstanten oder magischen Funktionen.

Beispiel:
PHP:
function __checkValid() {
........
}
oder
PHP:
define('__DEBUG__', $debugStr);

Hat das irgendeine Auswirkung die ich nicht ergooglen konnte oder welcher Sinn steckt dahinter?
 
Nö, das hat keine Auswirkung. Ich mach das bei Methoden / Attributen einer Klasse immer dann, wenn ich deren Sichtbarkeit auf protected oder private setze. Aber da benutze ich auch nur einen Unterstrich. Das erleichtert dann das Lesen des Quellcodes, da man direkt auf die Sichtbarkeit schließen kann.
 
Es ist in einigen Sprachen gang und gäbe dass der Geltungsbereich von Methoden und Attributen auch anhand des Namens erkennbar ist (z. B. PHP, Python). protected wird dabei häufig mit einem, private ebenfalls mit einem oder mit zwei Unterstrichen gekennzeichnet.
Bei Konstanten kenne ich das aber eigentlich nur bei magischen Konstanten.
 
Hi,

mAu hat gesagt.:
Nö, das hat keine Auswirkung.

das stimmt so nicht ganz.

aus dem Naming Guide:
PHP reserviert alle Symbole die mit zwei Unterstrichen __ beginnen für interne Zwecke. Sie sollten nur dann Namen mit __ beginnen lassen wenn Sie eine der dokumentierten "magischen" Funktionalitäten in PHP nutzen wollen

Auch wenn man sich jetzt einen Namen ausdenkt, der (noch) keine magische Methode oder Konstante bezeichnet: die sind ja nicht in Stein gemeißelt und können sich in zukünftigen Versionen ändern.

LG
 
Das kann aber auch bei ganz normal benannten Funktionen passieren (siehe z.B. [phpf]stripos[/phpf] und so…). Und der PHP-Interpreter wird sich schon beschweren, wenn man versucht eine Konstante bzw. Funktion neu zu deklarieren :)
 
Zuletzt bearbeitet:
Es ist aber wenig sinnvoll von solchen Konventionen abzuweichen. Schließlich sind sie da, um auch fremden Code schneller lesen und verstehen zu können.
Wenn dafür aber erst einmal der Stil des jeweiligen Autors erlernt werden muss, führt das eher zu Verwirrung als zu Verständlichkeit.
 
Hi,

Das kann aber auch bei ganz normal benannten Funktionen passieren (siehe z.B. [phpf]stripos[/phpf] und so…).

Ja. Abhilfe können z.B. Präfixe schaffen, wie es auch empfohlen wird.

Und der PHP-Interpreter wird sich schon beschweren, wenn man versucht eine Konstante bzw. Funktion neu zu deklarieren :)

Die magischen Methoden muss man ja selbst deklarieren. Das magische an ihnen ist, dass sie unter bestimmten Bedingungen automatisch aufgerufen werden. Wenn man eine Methode mit 2 Unterstrichen am Anfang benennt und dieser Name ein, zwei Versionen später eine magische Methode benennt, wird da nichts angemeckert. Es kann nur zu nicht vorgesehenem Verhalten führen.

Und ausserdem möchten wir doch alle aufwärtskompatibel programmieren und nicht nach jedem Update einen Haufen Fehler beseitigen müssen. ;)

LG
 
Danke Euch allen für die Info.
Im Grunde ist es also das was ich jetzt schon mache nur ich setze einfach privat oder protected als Präfix davor. Das kann keiner falsch verstehen.
 
Ich habe von Funktionen und Konstanten geredet. Nicht von Methoden. Bei diesen ist klar, dass der Interpreter nichts sagen wird… Nur der Form halber :)
 
Zurück