PHP中类方法的默认可见性

时间:2010-02-08 19:46:04

标签: php oop visibility

我看了manual,但我似乎无法找到答案。

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

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

class test {
  function go() {
  }
}

我问的原因是我看到很多构造函数代码编写为function __construct(),有些代码编写为public function __construct()。它们是等价的吗?

6 个答案:

答案 0 :(得分:164)

默认为公开。

  

类方法可以定义为public,private或protected。声明没有任何显式可见性关键字的方法被定义为public。

http://www.php.net/manual/en/language.oop5.visibility.php

答案 1 :(得分:21)

默认为公开。总是包含它是一个很好的做法,但PHP4支持没有访问修饰符的类,所以在遗留代码中看不到它们的使用是很常见的。

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

答案 2 :(得分:8)

默认为公开。原因可能是向后兼容,因为旧代码期望它是公开的(如果它不公开,它将停止工作)。

答案 3 :(得分:6)

  

默认可见性是PUBLIC

Source

答案 4 :(得分:1)

不使用visibility关键字(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
    }
}

答案 5 :(得分:0)

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

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