web-dev-qa-db-de.com

Standardsichtbarkeit von Klassenmethoden in PHP

Ich habe mir das manual angesehen, scheint aber keine Antwort zu finden.

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

Ist im folgenden Code go() öffentlich oder privat?

class test {
  function go() {
  }
}

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

102
Yada

Standard ist öffentlich.

Klassenmethoden können als öffentlich, privat oder geschützt definiert werden. Methoden, die ohne explizite Sichtbarkeitsschlüsselwörter deklariert werden, werden als öffentlich definiert.

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

157
Jansen Price

Standard ist öffentlich. Es ist eine gute Praxis, es immer einzubinden, PHP4 unterstützte jedoch Klassen ohne Zugriffsmodifizierer. Es ist daher üblich, dass sie im Legacy-Code nicht verwendet werden.

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

21
Johnco

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

8

Die Standardsichtbarkeit ist PUBLIC

Quelle

6
Sasa

function __construct() und public function __construct() arbeiten mit demselben Methodennamen.

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

0
Gazi Anis

Wenn kein visible - Schlüsselwort (public, private oder protected) verwendet wird, sind die Methoden public. Sie können jedoch keine Eigenschaften auf diese Weise definieren. Für properties müssen Sie bei der Deklaration ein Sichtbarkeits-Schlüsselwort anfügen.

Bei Eigenschaften, die nicht in der Klasse deklariert sind und Sie innerhalb einer Methode einen Wert zuweisen, wird 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
James.Valon