"public static" или "static public"? - PullRequest
       39

"public static" или "static public"?

42 голосов
/ 16 апреля 2009

Незначительный момент о ключевых словах объявления функций в PHP: если у вас есть статический метод класса, должно ли ключевое слово static идти до или после ключевого слова visibility (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() {}

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

Это проблема исключительно читабельности, поскольку она, очевидно, не имеет функциональных или конструктивных последствий. (Это я могу думать.)

Ответы [ 7 ]

46 голосов
/ 29 августа 2014

от PSR-2:

Видимость ДОЛЖНА быть объявлена ​​для всех свойств и методов; Аннотация и окончательный ДОЛЖЕН быть объявлен до видимости; статический ДОЛЖЕН быть объявлено после видимости. [ссылка]

... если вы заботитесь о стандарте и соглашениях PHP Framework Interop Group

То есть public static не static public в соответствии с ними.

45 голосов
/ 16 апреля 2009

Языки, такие как Java и C #, требуют, чтобы модификатор доступа был на первом месте, поэтому Редактировать: Предыдущая строка удара полностью ложная Ни один язык не имеет этого требования.


public static

выглядит правильно для меня. Аргументы могут быть выдвинуты для обоих подходов, и моё следующее: поскольку «static» определяет функцию, а не модификатор доступа, имеет смысл сказать

<access_modifier> static

Если вы используете его, значение слова «статический» будет менее понятным.

10 голосов
/ 01 апреля 2012

Далее Ответ Алексея Теницкого .

I prefer static public since this way 
it is easier to spot [usually rare] static methods in classes.

Все методы должны иметь указанную видимость. Итак, мы знаем, что в каждом методе будет упомянуто что-то в определении, единственный вопрос: «Какая настройка?».

Только некоторые из них являются статическими, поэтому для каждого из них мы должны спросить «Есть ли упоминание о ключевом слове static где-то в определении?». Итак, сначала поместите static, чтобы сделать ответ на этот вопрос более очевидным.

Или, как более широкое правило, .......... Я склонен ставить «самый необычный аспект в первую очередь», чтобы не подсознательно пропустить что-то при чтении. ; О)

Попробуйте этот тест.

Очень быстро ... Сколько статических методов в классе A?

class A {
 public static methodA() {
  }
 protected static methodB() {
  }
 private staticlymethodC() {
  } 
}

а сколько статических методов в классе B?

class B {
 public methodA() {
  }
 static protected methodB() {
  }
 static private methodC() {
  } 
}

Я думаю, что класс B гораздо легче понять.

9 голосов
/ 16 апреля 2009

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

5 голосов
/ 02 октября 2009

Я предпочитаю static public, поскольку таким образом легче обнаружить [обычно редкие] статические методы в классах.

5 голосов
/ 16 апреля 2009

Я ставлю видимость на первое место в каждом используемом языке, в котором есть модификаторы типов.

1 голос
/ 17 апреля 2009

Вы правы в том, что это не влияет на код. Следовательно, все зависит от того, что вы делаете, от ваших требований к стилю или от вашей команды. Проконсультируйтесь с ними и договоритесь о стиле.

Если вы кодируете только для себя, то вы должны выбрать для себя. Выбор не важен, но последовательность есть.

Еще один вопрос, который вы можете задать: использовать «public» или нет? Для обратной совместимости (в PHP4 не было скрытой информации) все, что не имеет модификатора видимости, является общедоступным по умолчанию. Стоит ли писать публично, если оно публично? Опять же, личный выбор: в любом случае сделайте веские аргументы, и вы убедите меня, что ваш выбор лучший.

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

...