"公共静态"还是"静态公众"?

dir*_*ide 42 php oop readability public-method

关于PHP函数声明关键字一个小点:如果你有一类方法是静态的,应在static关键字的知名度关键字之前或之后都(public,protected,private)?假设您的所有方法(静态或其他方法)都有可见性关键字,那么您希望visibility关键字与关键字保持在同一位置function:

public function foo() {}

public function bar() {}

protected function baz() {}

private function quux() {}
Run Code Online (Sandbox Code Playgroud)

现在假装一对夫妇是静态的:

public function foo() {}

static public function bar() {}

protected function baz() {}

static private function quux() {}
Run Code Online (Sandbox Code Playgroud)

此外,如果某个方法是静态的,那么您希望这是第一个看到的方法,因为这对于它甚至是可见性关键字所做的方法有更多的影响.

这严格来说是一个可读性问题,因为它显然没有功能或设计后果.(我能想到的.)

Pre*_*ays 47

从PSR-2:

必须在所有属性和方法上声明可见性; 必须在可见性之前声明抽象和最终; 必须在可见性之后声明static.[参考]

...如果您是一个关心PHP Framework Interop Group标准和约定的人.

所以public static不是static public根据他们.

  • @Eva仅用于方法和类声明.对于循环和条件等,他们建议在空格后将它们放在行尾:http://www.php-fig.org/psr/psr-2/我个人认为这比放置所有内容更容易阅读在行尾的大括号. (3认同)
  • 我的意思是,他们是否也主张将`{`放在新线上?毛.. (2认同)

And*_*are 45

像Java和C#这样的语言要求访问修饰符首先出现 编辑:上一个被击中的线是完全错误的.两种语言都没有这个要求.


public static
Run Code Online (Sandbox Code Playgroud)

看起来对我来说正确.可以为这两种方法做出论证,我的是:由于"静态"限定了函数而不是访问修饰符,因此更有意义地说

<access_modifier> static
Run Code Online (Sandbox Code Playgroud)

如果你使用它,那么围绕"静态"含义的另一种方式则不太清楚.

  • *Java 和 C# 都不需要这个。我相信他们“推荐”它,但“静态公共”在两种语言中都有效。(我刚刚编译了一个测试程序来检查。) (2认同)
  • (不过,撤销我的反对票,因为其余的都足够公平了——而且我当然同意“公共静态”看起来更合理。) (2认同)

JW.*_*JW. 10

Alexei Tenitski的回答.

I prefer static public since this way 
it is easier to spot [usually rare] static methods in classes.
Run Code Online (Sandbox Code Playgroud)

所有方法都应该具有指定的可见性.所以,我们知道每个方法都会在定义中提到某个方法,唯一的问题是"它是哪个设置?".

只有一些是静态的 - 所以,对于每一个我们都要问"在定义中某处提到静态关键字吗?".所以,先把静态放在第一位,使这个问题的答案更加明显.

或者,作为一个更广泛的规则,.........我倾向于把'最特别的方面放在首位',以便我在阅读时不会潜意识地跳过事物.; O)

试试这个测试.

很快...... A类有多少静态方法?

class A {
 public static methodA() {
  }
 protected static methodB() {
  }
 private staticlymethodC() {
  } 
}
Run Code Online (Sandbox Code Playgroud)

B类有多少静态方法?

class B {
 public methodA() {
  }
 static protected methodB() {
  }
 static private methodC() {
  } 
}
Run Code Online (Sandbox Code Playgroud)

我认为B类更容易理解.


Gre*_*g D 9

我不认为这是一个严格的PHP问题,并且对于它的价值很小,我总是首选放置可见性修饰符的一致性.我发现它更容易扫描.


cha*_*aos 5

我首先将可见性放​​在我使用的具有类型修饰符的每种语言中.


Ale*_*ski 5

我更喜欢static public这种方式,因此更容易在类中发现[通常很少见的]静态方法.