Beim Durchsuchen verschiedener PHP-Bibliotheken ist mir aufgefallen, dass viele Leute einigen Klassenmethoden einen einzelnen Unterstrich voranstellen, z
public function _foo()
...anstatt...
public function foo()
Mir ist klar, dass dies letztendlich auf persönliche Vorlieben zurückzuführen ist, aber ich habe mich gefragt, ob jemand einen Einblick hat, woher diese Gewohnheit kommt.
Mein Gedanke ist, dass es wahrscheinlich von PHP 4 übernommen wird, bevor Klassenmethoden als geschützt oder privat markiert werden können, um zu implizieren, dass "diese Methode nicht von außerhalb der Klasse aufgerufen wird". Mir ist aber auch aufgefallen, dass es vielleicht irgendwoher kommt (eine Sprache), mit der ich nicht vertraut bin, oder dass es gute Gründe dafür gibt, dass ich davon profitieren würde, wenn ich es weiß.
Alle Gedanken, Einsichten und / oder Meinungen würden geschätzt.
quelle
Antworten:
Es ist aus den schlechten alten Zeiten von Object Oriented PHP (PHP 4). Diese Implementierung von OO war ziemlich schlecht und beinhaltete keine Dinge wie private Methoden. Um dies zu kompensieren, haben PHP-Entwickler Methoden, die privat sein sollten, einen Unterstrich vorangestellt. In einigen älteren Klassen werden Sie sehen
/**private*/ __foo() {
, dass es etwas mehr Gewicht gibt.Ich habe noch nie von Entwicklern gehört, die all ihren Methoden Unterstriche voranstellen, daher kann ich nicht erklären, was das verursacht.
quelle
Ich glaube, die derzeit maßgeblichste Quelle für diese Art von Konventionen für PHP ist der PSR-2: Coding Style Guide, da das Zend Framework Teil von PSR ist :
quelle
Jetzt, im Jahr 2013, ist dies nach der PSR-2-Codierungsrichtlinie "offiziell" ein schlechter Stil :
Quelle: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
quelle
PSR-2
-> "SOLLTE NICHT" bedeutet "NICHT EMPFEHLEN" nicht verboten Das bedeutet in einigen Fällen akzeptabel. PSR Doc -> ietf.org/rfc/rfc2119.txtIch war stark dagegen, privaten / geschützten Methoden einen Unterstrich voranzustellen, da Sie dafür das private / geschützte Schlüsselwort verwenden können und IDE es für Sie markiert.
Und ich bin es immer noch, aber ich habe einen Grund gefunden, warum es eine gute Praxis sein kann. Stellen Sie sich vor, Sie haben eine öffentliche Methode
addFoo()
und innerhalb dieser Methode haben Sie einen Teil der Aufgabe, der mit anderen Methoden gemeinsam istaddFooWhenBar()
,addFooWhenBaz()
... Nun, der beste Name für diese allgemeine Methode wäreaddFoo()
, aber er ist bereits vergeben, also müssen Sie sich einen einfallen lassen hässlicher Name wieaddFooInternal()
oderaddFooCommon()
oder ... aber_addFoo()
private Methode sieht aus wie die beste.quelle
Führende Unterstriche werden in der Regel für private Immobilien und Methoden verwendet . Keine Technik, die ich normalerweise verwende, die aber bei einigen Programmierern beliebt bleibt.
quelle
Ich verwende einen führenden Unterstrich in der PHP 5-Klasse, die ich für private Methoden schreibe. Es ist ein kleiner visueller Hinweis für den Entwickler, dass ein bestimmtes Klassenmitglied privat ist. Diese Art von Hinweisen ist nicht so nützlich, wenn Sie eine IDE verwenden, die öffentliche und private Mitglieder für Sie unterscheidet. Ich habe es von meinen C # -Tagen abgeholt. Alte Gewohnheiten...
quelle
Ich glaube, Ihre ursprüngliche Annahme war richtig. Ich habe festgestellt, dass es in einigen Sprachen üblich ist, Methoden / Mitgliedern usw., die für das "Objekt" privat gehalten werden sollen, einen Unterstrich voranzustellen. Nur eine visuelle Art zu sagen, obwohl Sie können, sollten Sie dies nicht nennen!
quelle
Ich habe nach der gleichen Antwort gesucht, einige Nachforschungen angestellt und gerade festgestellt, dass PHP-Frameworks unterschiedliche Stile vorschlagen:
Code Zünder
Das offizielle Handbuch enthält einen Abschnitt zum Codierungsstil, der diese Vorgehensweise fördert :
Andere Frameworks machen dasselbe wie
Cakephp:
macht das gleiche :
Und auch
BIRNE
macht das gleiche :
Während
Drupal
Der Codestil warnt ausdrücklich davor :
Symphonie
auf der anderen Seite erklärt :
quelle
Ich kenne es aus Python, wo das Präfixieren Ihrer Variablen mit einem Unterstrich den Compiler veranlasst, eine zufällige Folge von Buchstaben und Zahlen vor dem tatsächlichen Variablennamen zu übersetzen. Dies bedeutet, dass jeder Versuch, von außerhalb der Klasse auf die Variable zuzugreifen, zu einem Fehler "Variable undefined" führen würde.
Ich weiß jedoch nicht, ob dies immer noch die Konvention ist, die in Python verwendet werden soll
quelle
In Drupal (ein PHP-CMS) können Unterstriche verwendet werden, um zu verhindern, dass Hooks aufgerufen werden ( https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7 ).
Wenn ich ein Modul namens "my_module" habe und eine Funktion my_module_insert benennen möchte, würde es die Funktion hook_insert "einhaken". Um dies zu verhindern, kann ich meine Funktion in _my_module_insert umbenennen.
ps Die Art und Weise, wie Hooks in Drupal funktionieren, ist es möglich, versehentlich einen Hook zu implementieren, was sehr schlecht ist.
quelle
Drupal und Unterstrich:
Im Allgemeinen besteht der Unterstrich darin, einfach die Tatsache zu markieren, dass eine Funktion wahrscheinlich nur von einer verwandten übergeordneten Funktion aufgerufen wird ...
Natürlich nur ein einfaches Beispiel ...
quelle
Verwenden Sie den Unterstrich nur, um sich daran zu erinnern, dass wir die Variable nicht außerhalb der Klasse ändern / die Funktion aufrufen.
Da wir const-Variablen in Großbuchstaben deklarieren, können wir beim Anzeigen des Variablennamens vermuten, dass es sich um eine const-Variable handelt. Ähnlich wie die Variable, die wir außerhalb der Klasse nicht ändern möchten, deklarieren wir sie mit einem Unterstrich für unsere eigene Konvention.
quelle
Sie werden "magische Methoden" genannt .
quelle
_foo()
mit einem einzigen führenden Unterstrich ist keine magische Methode. Magische Methoden werden durch zwei aufeinanderfolgende führende Unterstriche gekennzeichnet. Die Frage hier spricht nur von einer.