Domyślna widoczność metod klas w PHP

118

Zajrzałem do instrukcji , ale nie mogę znaleźć odpowiedzi.

Jaka jest domyślna widoczność w PHP dla metod bez deklaracji widoczności? Czy PHP ma widoczność pakietu jak w Javie?

Na przykład w poniższym kodzie, czy jest go()publiczny czy prywatny?

class test {
  function go() {
  }
}

Powodem, dla którego zapytałem, jest to, że widziałem kod wielu konstruktorów napisany jako, function __construct()a niektóre jako public function __construct(). Czy są równoważne?

Yada
źródło

Odpowiedzi:

179

Domyślnie jest publiczny.

Metody klasowe można zdefiniować jako publiczne, prywatne lub chronione. Metody zadeklarowane bez wyraźnego słowa kluczowego widoczności są zdefiniowane jako publiczne.

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

Jansen Price
źródło
11
To samo dotyczy nieruchomości
Marc. 2377
7
To samo dotyczy stałych.
Kolyunya
22

Domyślnie jest publiczny. Dobrą praktyką jest zawsze dołączanie go, jednak PHP4 obsługuje klasy bez modyfikatorów dostępu, więc często nie widać ich użycia w starszym kodzie.

I nie, PHP nie ma widoczności pakietów, głównie dlatego, że do niedawna PHP nie miało żadnych pakietów.

Johnco
źródło
16
@Ian: Powiedziałbym, ponieważ „wyraźne jest lepsze niż ukryte” (jak mówi Zen Pythona ). Powoduje, że inni programiści marnują cykle mózgowe, zastanawiając się, czy konstruktor jest prywatny, czy publiczny, czy co. Jeśli ludzie zawsze używali modyfikatorów dostępu, oryginalny plakat mógł nawet nie zadać tego pytania.
Użytkownik
Warto również zauważyć, że w językach takich jak Java, gdzie domyślnym ustawieniem jest pakiet prywatny, zawsze można się zastanawiać, czy jest to pakiet prywatny z założenia, czy też programista po prostu zapomniał go określić (szczególnie w przypadku mniej starszych programistów). Dlatego PMD zawiera takie zasady, jak to: pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…
Johnco,
9

Wartość domyślna to public. Przyczyną jest prawdopodobnie kompatybilność wsteczna, ponieważ stary kod oczekuje, że będzie publiczny (przestał działać, gdyby nie był publiczny).

Tomas Markauskas
źródło
Uznanie za uzasadnienie.
Guney Ozsan
7

Widoczność domyślna to PUBLICZNA

Źródło

Sasa
źródło
1

W przypadku braku widoczności kluczowe ( public, privatelub protected) stosowane metody będą publiczne . Jednak w ten sposób nie można definiować właściwości. W przypadku nieruchomości konieczne będzie dołączenie słowa kluczowego widoczności w deklaracji.

Właściwości, które nie są zadeklarowane w klasie i przypisujesz im wartość wewnątrz metody, będą miały publiczną widoczność.

<?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
źródło
0

function __construct()i public function __construct()działa z tą samą nazwą metody.

Jeśli nie możesz zdefiniować przedrostka dla nazwy metody, domyślnie powinien on być public.

Gazi Anis
źródło