PHP中类方法的默认可见性


118

我看了看手册,但似乎找不到答案。

没有可见性声明的方法在PHP中的默认可见性是什么?PHP是否像Java一样具有包可见性?

例如,在以下代码中,是go()公共的还是私有的?

class test {
  function go() {
  }
}

我问的原因是,我已经看到许多构造函数代码分别以function __construct()和编写public function __construct()。它们相等吗?

Answers:



22

默认为公开。始终包含它是一个好习惯,但是PHP4支持的类没有访问修饰符,因此常见的是在遗留代码中不使用它们。

不,PHP没有软件包可见性,主要是因为直到最近PHP才没有软件包。


16
@Ian:我要说的是因为“显式优于隐式”(正如pythonZen所说)。这导致其他程序员浪费脑力,想知道构造函数是私有的还是公共的,还是什么。如果人们总是使用访问修饰符,那么原始发布者可能甚至没有问过这个问题。
用户

还要注意的是,在诸如Java之类的语言上,默认设置是package-private,人们总是想知道它是否是设计专有的package-private,还是开发人员忘了指定它(特别是在与不太高级的开发人员打交道时)。这就是为什么PMD包含如下规则的原因:pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…–
Johnco



1

当没有知名度的关键字(publicprivateprotected使用),方法将公开。但是,您不能以这种方式定义属性。对于properties,您将需要在声明后附加可见性关键字。

对于未在类中声明的属性,并且您在方法内部为其分配值的属性将具有公共可见性。

<?php
class Example {
    public $name; 
    public function __construct() {
        $this -> age = 9; // age is now public
        $this -> privateFunction();
    }
    private function privateFunction() {
        $this -> country = "USA"; // this is also public
    }
}

0

function __construct()public function __construct()以相同的方法名称工作。

如果您无法定义方法名称的前缀,则默认情况下应为public。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.