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?

Yada
quelle

Antworten:

179

Standard ist öffentlich.

Klassenmethoden können als öffentlich, privat oder geschützt definiert werden. Methoden, die ohne explizites Sichtbarkeitsschlüsselwort deklariert wurden, werden als öffentlich definiert.

http://www.php.net/manual/en/language.oop5.visibility.php

Jansen Preis
quelle
11
Gleiches gilt für Immobilien
März 2377
7
Gleiches gilt für Konstanten.
Kolyunya
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.

Johnco
quelle
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).

Tomas Markauskas
quelle
Ein großes Lob für die Begründung.
Guney Ozsan
7

Die Standardsichtbarkeit ist PUBLIC

Quelle

Sasa
quelle
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
    }
}
James.Valon
quelle
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.

Gazi Anis
quelle