Недостаток ключевых слов объявления функции в PHP: если у вас есть статический метод класса, должно ли static
ключевое слово появляться до или после ключевого слова видимости ( public
, protected
, private
)? Предполагая, что все ваши методы, статические или другие, имеют ключевое слово видимости, то вы хотите, чтобы ключевое слово видимости оставалось в том же месте относительно ключевого слова function
:
public function foo() {} public function bar() {} protected function baz() {} private function quux() {}
Теперь притворимся, что пара статична:
public function foo() {} static public function bar() {} protected function baz() {} static private function quux() {}
Кроме того, если метод статичен, вы хотите, чтобы это было первым, что видно, потому что это больше влияет на какой метод он есть, чем на ключевое слово видимости.
Это строго проблема чтения, поскольку она, очевидно, не имеет никаких функциональных или конструктивных последствий. (Что я могу придумать.)
Языки, такие как Java и C #, требуют, чтобы модификатор доступа Изменить: предыдущая пораженная строка полностью неверна. Ни один из этих языков не имеет этого требования.
public static
выглядит правильно для меня. Аргументы могут быть сделаны для обоих подходов, а мой – так: поскольку «статический» квалифицирует функцию, а не модификатор доступа, имеет смысл сказать
<access_modifier> static
Если вы используете его, то другой путь вокруг значения «статический» менее ясен.
Из PSR-2:
Видимость ДОЛЖНА быть объявлена во всех свойствах и методах; абстрактные и окончательные ДОЛЖНЫ быть объявлены перед видимостью; static должно быть объявлено после видимости. [Справка]
… если вам нужно позаботиться о стандарте и соглашениях группы PHP Framework Interop.
Таким образом, public static
static public
соответствии с ними.
Я не думаю, что это строго PHP-вопрос, и за что мало стоит, я всегда предпочитал согласованность размещения модификатора видимости в первую очередь. Мне легче сканировать.
Далее ответ Алексея Теницкого .
I prefer static public since this way it is easier to spot [usually rare] static methods in classes.
Все методы должны иметь свою видимость. Итак, мы знаем, что каждый метод будет иметь то, что упоминается в этом определении, единственный вопрос: «Какая настройка это?».
Только некоторые из них являются статическими, поэтому для каждого из них мы должны спросить: «Есть ли упоминание статического ключевого слова где-то в определении?». Итак, ставьте статические, чтобы сделать ответ на этот вопрос более очевидным.
Или, как более широкое правило, ……… Я склонен сначала поставить «самый экстраординарный аспект», чтобы я не подсознательно не пропускал вещи при чтении их. ; О)
Попробуйте этот тест.
Очень быстро … Сколько статических методов есть в классе A?
class A { public static methodA() { } protected static methodB() { } private staticlymethodC() { } }
и сколько статических методов существует в классе B?
class B { public methodA() { } static protected methodB() { } static private methodC() { } }
Я думаю, что класс B намного легче понять быстро.
Сначала я набираю видимость на каждом используемом языке, у которого есть модификаторы типов.
Я предпочитаю static public
так как это легче обнаружить [обычно редкие] статические методы в классах.
Вы правы в том, что он не влияет на код. Таким образом, это зависит от ваших собственных требований к стилю, а также от ваших действий в отношении того, что вы делаете. Проконсультируйтесь с ними и договоритесь о стиле.
Если вы кодируете только для себя, тогда вы должны выбрать для себя. Выбор не важен, но последовательность.
Другой вопрос, который вы можете задать, должен: следует ли использовать «публичный» или нет? Для обратной совместимости (PHP4 не скрывал информации) что-либо без модификатора видимости является общедоступным по умолчанию. Должны ли вы писать публично, если это публично? Опять личный выбор: сделайте сильный аргумент в любом случае, и вы убедите меня, что ваш выбор лучше.
Лично, когда я просматриваю и очищаю свой собственный код, мне нравится сначала нанести модификатор видимости и указать его, даже если он является общедоступным.