“公共静态”还是“静态公共”?
Posted
技术标签:
【中文标题】“公共静态”还是“静态公共”?【英文标题】:"public static" or "static public"? 【发布时间】:2010-10-19 22:27:50 【问题描述】:关于 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()
另外,如果一个方法是静态的,你希望它是第一个看到的,因为这比可见性关键字更能影响它是什么类型的方法。
这完全是一个可读性问题,因为它显然没有功能或设计后果。 (我能想到的。)
【问题讨论】:
【参考方案1】:来自 PSR-2:
必须在所有属性和方法上声明可见性;抽象的 final 必须在可见性之前声明;静态必须是 可见性后声明。 [reference]
...如果您关心 PHP Framework Interop Group 标准和约定。
根据他们的说法,public static
不是 static public
。
【讨论】:
更完整的引用:“必须在所有属性和方法上声明可见性;必须在可见性之前声明抽象和最终;必须在可见性之后声明静态。” source 我的意思是他们不也提倡将
单独放在新行上吗?总..
@Eva 仅用于方法和类声明。对于循环和条件等,他们建议将它们放在行尾的空格后面:php-fig.org/psr/psr-2 我个人觉得这比将所有大括号都放在行尾更容易阅读。【参考方案2】:
进一步Alexei Tenitski's answer。
I prefer static public since this way
it is easier to spot [usually rare] static methods in classes.
所有方法都应该指定它们的可见性。所以,我们知道每个方法都会在定义中提到,唯一的问题是“它是哪个设置?”。
只有一些是静态的——所以,对于每一个,我们都必须问“在定义的某处是否提到了 static 关键字?”。所以,把静态放在第一位,让这个问题的答案更明显。
或者,作为更广泛的规则,…………我倾向于将“最非凡的方面”放在首位,这样我在阅读时就不会下意识地跳过它们。 ;o)
试试这个测试。
很快...A类中有多少静态方法?
class A
public static methodA()
protected static methodB()
private staticlymethodC()
B 类中有多少个静态方法?
class B
public methodA()
static protected methodB()
static private methodC()
我认为 B 类更容易快速理解。
【讨论】:
@aW-k9IdI'-I0llwlg'I - 我不明白你的意思。您不能反转访问修饰符的参数 - “所有方法都应该指定它们的可见性。只有一些方法具有静态状态的指示”。【参考方案3】:我更喜欢static public
,因为这样更容易在类中发现[通常很少见的]静态方法。
【讨论】:
我打算写这个作为答案。我完全同意。【参考方案4】:您是正确的,因为它对代码没有影响。因此,这取决于您自己或您团队的风格要求,至于您所做的事情。与他们协商并就风格达成一致。
如果您只是为自己编码,那么您应该自己选择。选择不重要,但一致性很重要。
您可能会问的另一个问题是:您应该使用“public”还是不使用?为了向后兼容(PHP4 没有信息隐藏),任何没有可见性修饰符的东西默认都是公开的。如果它是公开的,你应该费心写公开吗?再次个人选择:无论哪种方式都提出强有力的论据,你会说服我你的选择是最好的。
就我个人而言,当我浏览并清理自己的代码时,我喜欢将可见性修饰符放在首位,即使是公开的也要指定它。
【讨论】:
我考虑过省略“public”,因为它在技术上是多余的,但我发现最好是明确的。这样当我六个月后回到我的代码时,我就不必想知道为什么方法 foo(); 上没有 access 关键字。我只是忘了放一个,还是我的意思是要公开?【参考方案5】:Java 和 C# 等语言要求访问修饰符在前,因此 编辑: 前面划线的行是完全错误的。两种语言都没有这个要求。
public static
在我看来是正确的。可以为这两种方法提出论据,我的观点是这样的:由于“静态”限定了函数而不是访问修饰符,所以说
<access_modifier> static
如果你反过来使用它,“静态”的含义就不太清楚了。
【讨论】:
既不 Java 也不 C#需要这个。我相信他们推荐它,但“静态公共”在两种语言中都有效。 (我刚刚编译了一个测试程序来检查。) (尽管取消了我的反对意见,因为其余的都足够公平 - 我当然同意“公共静态”看起来更合理。) 我认为无论您使用什么,只要保持一致即可。那么没有人会关心你使用什么顺序。【参考方案6】:在我使用的每种具有类型修饰符的语言中,我都将可见性放在首位。
【讨论】:
【参考方案7】:我不认为这是一个严格的 PHP 问题,而且对于它的价值来说,我一直更喜欢将可见性修饰符放在首位的一致性。我发现它更容易扫描。
【讨论】:
以上是关于“公共静态”还是“静态公共”?的主要内容,如果未能解决你的问题,请参考以下文章