2009-04-16 14 views
37

Ein kleiner Punkt zu Funktionsdeklarationsschlüsselwörtern in PHP: Wenn Sie eine Klassenmethode haben, die statisch ist, sollte das Schlüsselwort static vor oder nach dem Sichtbarkeitsschlüsselwort stehen (public, protected, private)? Unter der Annahme, alle Methoden, statisch oder auf andere Weise, eine Sichtbarkeit Schlüsselwort, dann würden Sie die Sichtbarkeit Schlüsselwort wollen an der gleichen Stelle relativ zum function Schlüsselwort bleiben:"öffentliche statische" oder "statische Öffentlichkeit"?

public function foo() {} 

public function bar() {} 

protected function baz() {} 

private function quux() {} 

Jetzt ein paar vorgeben sind statisch:

auch
public function foo() {} 

static public function bar() {} 

protected function baz() {} 

static private function quux() {} 

, wenn eine Methode statisch ist, mögen Sie, dass die ersten Sache zu sehen sein, denn das ist mehr Einfluss auf welcher Art von Verfahren hat es als auch die Sichtbarkeit Schlüsselwort tut.

Dies ist streng genommen ein Lesbarkeitsproblem, da es offensichtlich keine funktionalen oder Design-Konsequenzen hat. (Dass ich mir vorstellen kann.)

Antwort

43

Sprachen wie Java und C# erfordern, dass die Zugriffsmodifikator kommen zuerst soEdit: Die bisherige schlug Linie ist völlig falsch. Keine Sprache hat diese Anforderung.


public static 

scheint mir richtig. Argumente können für beide Ansätze gemacht werden und mir ist dies: Da „statisch“ qualifiziert die Funktion eher als der Zugriffsmodifikator es mehr Sinn

zu sagen macht
<access_modifier> static 

Wenn Sie es in die andere Richtung um die Bedeutung von „statisch verwenden "ist weniger klar.

+1

* Weder * Java * noch * C# erfordern dies. Ich glaube, sie * empfehlen * es, aber "statische Öffentlichkeit" ist in beiden Sprachen gültig. (Ich habe gerade ein Testprogramm zusammengestellt, das ich überprüfen kann.) –

+1

(Ich habe meinen Downvote allerdings rückgängig gemacht, da der Rest gerecht genug ist - und ich stimme sicherlich zu, dass "public static" vernünftiger aussieht.) –

+0

Huch! Mein Fehler - Sie haben Recht! –

9

Ich glaube nicht, dass dies eine reine PHP-Frage ist, und für das Wenige, was es wert ist, habe ich immer die Konsistenz bevorzugt, den Sichtbarkeitsmodifikator zuerst zu platzieren. Ich finde es einfacher zu scannen.

5

Ich setze Sichtbarkeit zuerst in jeder Sprache, die ich verwende, die Modifikatoren hat.

1

Sie haben Recht, dass es keinen Einfluss auf den Code hat. Daher liegt es an Ihren eigenen Stilanforderungen oder denen Ihres Teams, was Sie tun. Konsultieren Sie sie und vereinbaren Sie einen Stil.

Wenn Sie nur für sich selbst codieren, sollten Sie selbst wählen. Die Wahl ist nicht wichtig, aber Konsistenz ist.

Eine andere Frage, die Sie stellen können, ist: sollten Sie "öffentlich" verwenden oder nicht? Aus Gründen der Abwärtskompatibilität (PHP4 hatte keine Informationen versteckt) ist alles ohne einen Sichtbarkeitsmodifikator standardmäßig öffentlich. Solltest du öffentlich schreiben, wenn es öffentlich ist? Wieder eine persönliche Entscheidung: Machen Sie ein starkes Argument, und Sie werden mich davon überzeugen, dass Ihre Wahl am besten ist.

Persönlich, wenn ich durchgehen und meinen eigenen Code bereinige, setze ich gerne den Sichtbarkeitsmodifizierer zuerst und spezifiziere ihn, selbst wenn es öffentlich ist.

+3

Ich habe überlegt, "öffentlich" wegzulassen, da es technisch redundant ist, aber ich finde es besser, explizit zu sein. Auf diese Weise, wenn ich sechs Monate später zu meinem Code zurückkomme, muss ich mich nicht fragen, warum es kein Zugriffsschlüsselwort für die Methode foo() gibt; habe ich nur vergessen, eins dort zu platzieren, oder wollte ich es öffentlich machen? – dirtside

+0

guter Punkt ☻ – thomasrutter

5

Ich bevorzuge static public seit dieser Weise ist es leichter, [in der Regel seltene] statische Methoden in Klassen zu erkennen.

+0

Ich würde dies als Antwort schreiben. Ich bin vollkommen einverstanden. –

10

Weiter zu Alexei Tenitski's answer.

I prefer static public since this way 
it is easier to spot [usually rare] static methods in classes. 

Alle Methoden sollten ihre Sichtbarkeit angegeben haben. Also, wir wissen, dass jede Methode das irgendwo in der Definition erwähnt hat, die einzige Frage ist "Welche Einstellung ist es?".

Nur einige sind statisch - also müssen wir für jeden einzelnen fragen "Gibt es irgendwo in der Definition eine Erwähnung des statischen Schlüsselworts?". Also, setze statisch zuerst, um die Antwort auf diese Frage offensichtlicher zu machen.

Oder, als eine breitere Regel, ......... Ich neige dazu, 'den außergewöhnlichsten Aspekt zuerst' zu setzen, so dass ich unterbewusst nicht die Dinge überspringe, wenn ich sie lese. ; o)

Versuchen Sie diesen Test.

Sehr schnell ... Wie viele statische Methoden gibt es in Klasse A?

class A { 
public static methodA() { 
    } 
protected static methodB() { 
    } 
private staticlymethodC() { 
    } 
} 

und wie viele statische Methoden gibt es in Klasse B?

class B { 
public methodA() { 
    } 
static protected methodB() { 
    } 
static private methodC() { 
    } 
} 

Ich denke, Klasse B ist viel schneller zu verstehen.

+6

Das gleiche Argument kann für die Zugriffsmodifizierer verwendet werden ... –

+0

@ aW-k9IdI'-I0llwlg'I - Ich verstehe nicht, was Sie meinen. Das Argument für Zugriffsmodifizierer kann nicht invertiert werden - "Alle Methoden sollten ihre Sichtbarkeit angeben. Nur einige Methoden weisen einen statischen Status auf". –

33

Von PSR-2:

Sichtbarkeit muss auf allen Eigenschaften und Methoden deklariert werden; Zusammenfassung und endgültig muss vor der Sichtbarkeit deklariert werden; Statische MUSS nach der Sichtbarkeit deklariert werden. [reference]

... wenn Sie sich um den Standard und die Konventionen der PHP Framework Interop Group kümmern.

So public static nicht static public nach ihnen.

+0

Ein vollständigeres Zitat: "Sichtbarkeit muss auf allen Eigenschaften und Methoden erklärt werden; abstrakte und endgültige müssen vor der Sichtbarkeit deklariert werden; statische müssen nach der Sichtbarkeit deklariert werden." [Quelle] (http://www.php-fig.org/psr/psr-2/) –

+2

ich meine, sie nicht auch befürworten, '' 'auf neue Zeilen alles für sich selbst setzen? Brutto .. – Eva

+2

@Eva Nur für Methoden- und Klassendeklarationen. Für Schleifen und Bedingungen usw. empfehlen sie, sie nach einem Leerzeichen am Ende der Zeile zu platzieren: http: //www.php-fig.org/bsr/bsr-2/Ich persönlich finde das viel leichter zu lesen als alle Klammern am Ende der Zeile zu platzieren. –

Verwandte Themen