Standardsichtbarkeit von Klassenmethoden in PHP


118

Ich habe mir das Handbuch angesehen , aber ich kann die Antwort anscheinend nicht finden.

Was ist die Standardsichtbarkeit in PHP für Methoden ohne Sichtbarkeitserklärung? Hat PHP eine Paketsichtbarkeit wie in Java?

Ist der folgende Code beispielsweise go()öffentlich oder privat?

class test {
  function go() {
  }
}

Der Grund, den ich gefragt habe, ist, dass ich viele Konstruktoren gesehen habe, die als function __construct()und einige als geschrieben wurden public function __construct(). Sind sie gleichwertig?

Antworten:



22

Standard ist öffentlich. Es ist eine gute Praxis, es immer einzuschließen. PHP4-unterstützte Klassen ohne Zugriffsmodifikatoren werden jedoch häufig nicht in Legacy-Code verwendet.

Und nein, PHP hat keine Paketsichtbarkeit, hauptsächlich weil PHP bis vor kurzem keine Pakete hatte.


16
@ Ian: Ich würde sagen, weil "explizit ist besser als implizit" (wie das Zen von Python sagt). Andere Programmierer verschwenden Gehirnzyklen und fragen sich, ob der Konstruktor privat oder öffentlich ist oder was. Wenn Benutzer immer Zugriffsmodifikatoren verwendet haben, hat das Originalposter diese Frage möglicherweise nicht einmal gestellt.
Benutzer

Bemerkenswert ist auch, dass in Sprachen wie Java, in denen die Standardeinstellung "paketprivat" ist, immer gefragt wird, ob es sich um "paketprivat" handelt oder ob der Entwickler einfach vergessen hat, es anzugeben (insbesondere, wenn es sich um weniger erfahrene Entwickler handelt). Aus diesem Grund enthält PMD Regeln wie diese: pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…
Johnco

9

Der Standardwert ist public. Der Grund ist wahrscheinlich die Abwärtskompatibilität, da der alte Code erwartet, dass er öffentlich ist (er würde nicht mehr funktionieren, wenn er nicht öffentlich wäre).


Ein großes Lob für die Begründung.
Guney Ozsan


1

Wenn keine Sichtbarkeit Schlüsselwort ( public, privateoder protected) verwendet werden Methoden seiner Öffentlichkeit . Auf diese Weise können Sie jedoch keine Eigenschaften definieren. Für Eigenschaften müssen Sie ein Sichtbarkeitsschlüsselwort an die Deklaration anhängen.

Für Eigenschaften, die nicht in der Klasse deklariert sind und denen Sie innerhalb einer Methode einen Wert zuweisen, ist sie öffentlich sichtbar.

<?php
class Example {
    public $name; 
    public function __construct() {
        $this -> age = 9; // age is now public
        $this -> privateFunction();
    }
    private function privateFunction() {
        $this -> country = "USA"; // this is also public
    }
}

0

function __construct()und public function __construct()funktioniert wie der gleiche Methodenname.

Wenn Sie das Präfix für einen Methodennamen nicht definieren konnten, sollte es standardmäßig öffentlich sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.