定义一个没有可见性的类方法是“公共”的简写吗?

Posted

技术标签:

【中文标题】定义一个没有可见性的类方法是“公共”的简写吗?【英文标题】:Is defining a class method without visibility a shorthand of 'public'? 【发布时间】:2012-06-14 18:59:27 【问题描述】:

我经常看到代码定义了没有可见性关键字的函数。例如:

class Foo() 
  function bar() 
    // ...
  

它是public 函数的简写吗?省略它是一个好习惯吗?

class Foo() 
  public function bar() 
    //..
  

【问题讨论】:

是的,这是公开的,而且 imo 省略它是 bad 的做法。如果您这样做,IDE 中的自动完成功能可能无法将该功能识别为公共功能(NetBeans 尤其存在问题)。 IMO,它是完全可选的。您真正需要指定的唯一时间是您是否遵循单例模式并且您需要它是私有的。 我总是包含public,因为我认为关注代码可读性始终是一个好习惯。 php.net/language.oop5.visibility 【参考方案1】:

如PHP Doc所写,

没有任何显式可见性关键字声明的方法被定义为公共。

所以,是的,在

class Foo()  public function bar()  //..  

Foo::bar() 是公开的,但省略可见性关键字绝不是一个好习惯。如果它是一个又快又丑的脚本,为什么不呢,但在其他情况下你应该指定它。

【讨论】:

【参考方案2】:

是的,你是对的;当你省略可见性修饰符时,它意味着它是public

这是 PHP 4 的保留,不支持可见性运算符。包含此功能是为了向后兼容。

您可以阅读更多关于它的信息here。

【讨论】:

+1 提供解释这是关于什么的,所以每个人都可以做自己的决定。

以上是关于定义一个没有可见性的类方法是“公共”的简写吗?的主要内容,如果未能解决你的问题,请参考以下文章

特征可以具有具有私有和受保护可见性的属性和方法吗?特质可以有构造函数、析构函数和类常量吗?

为啥 PHP 的空合并运算符 (??) 不能处理具有不同可见性的类常量?

Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️UI和物体可见性的判断方法

在不“推”其他元素的情况下切换图像可见性的最佳方法是啥?