Видимость по умолчанию методов класса в PHP - PullRequest
108 голосов
/ 08 февраля 2010

Я посмотрел руководство , но, похоже, не могу найти ответ.

Какова видимость по умолчанию в PHP для методов без объявления видимости? Есть ли в PHP видимость пакета, как в Java?

Например, в следующем коде go() общедоступно или приватно?

class test {
  function go() {
  }
}

Причина, по которой я спросил, состоит в том, что я видел код многих конструкторов, написанный как function __construct(), а некоторые как public function __construct() Они эквивалентны?

Ответы [ 6 ]

166 голосов
/ 08 февраля 2010

По умолчанию публично.

Методы класса могут быть определены как публичные, частные или защищенные. Методы, объявленные без какого-либо явного ключевого слова видимости, определяются как публичные.

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

21 голосов
/ 08 февраля 2010

По умолчанию публично. Рекомендуется всегда включать его, однако классы, поддерживаемые PHP4, без модификаторов доступа, поэтому обычно их не используют в унаследованном коде.

И нет, в PHP нет видимости пакетов, главным образом потому, что до недавнего времени в PHP не было пакетов.

8 голосов
/ 08 февраля 2010

По умолчанию публично. Причина, вероятно, заключается в обратной совместимости, поскольку старый код ожидает, что он будет общедоступным (он перестанет работать, если он не будет публичным).

6 голосов
/ 24 января 2012

Видимость по умолчанию: ОБЩЕСТВЕННАЯ

Источник

1 голос
/ 28 февраля 2019

Если ключевое слово visibility (public, private или protected) не используется, методы будут public . Но вы не можете определить свойства таким образом. Для свойств вам необходимо добавить ключевое слово видимости в объявление.

Для свойств, которые не объявлены в классе, и вы присваиваете ему значение внутри метода, будет общедоступным.

<?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 голосов
/ 17 января 2019

function __construct() и public function __construct() работают как одно имя метода.

Если вы не можете определить префикс для имени метода, он должен быть по умолчанию общедоступным.

...