2010-02-08 4 views
89

Я посмотрел на manual, но я не могу найти ответ.По умолчанию видимость методов класса в PHP

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

Например, в следующем коде, является go() государственным или частным лицом?

class test { 
    function go() { 
    } 
} 

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

ответ

141

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

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

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

+4

То же самое касается свойств –

+0

То же самое касается констант. – Kolyunya

18

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

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

+1

Почему это "хорошая практика, чтобы всегда включать в себя это"? – Ian

+14

@Ian: Я бы сказал, потому что «явный лучше, чем неявный» (как говорит [Zen of python] (http://stackoverflow.com/questions/228181/the-zen-of-python)). Это заставляет других программистов тратить мозговые циклы на размышления о том, является ли конструктор частным или публичным или что-то еще. Если люди всегда использовали модификаторы доступа, оригинальный плакат, возможно, даже не задал этот вопрос. – User

+0

Также следует отметить, что на таких языках, как Java, по умолчанию был закрыт пакет, каждый всегда задается вопросом, является ли он индивидуальным по пакетам, или разработчик просто забыл указать его (особенно при работе с не очень старшими разработчиками) , Вот почему PMD включает такие правила, как: https://pmd.github.io/pmd-5.5.2/pmd-java/rules/java/comments.html#CommentDefaultAccessModifier – Johnco

7

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

Смежные вопросы