我看了manual,但我似乎无法找到答案。
没有可见性声明的方法,PHP的默认可见性是什么? PHP是否具有Java中的包可见性?
例如,在以下代码中,go()
是公共还是私有?
class test {
function go() {
}
}
我问的原因是我看到很多构造函数代码编写为function __construct()
,有些代码编写为public function __construct()
。它们是等价的吗?
答案 0 :(得分:164)
默认为公开。
类方法可以定义为public,private或protected。声明没有任何显式可见性关键字的方法被定义为public。
答案 1 :(得分:21)
默认为公开。总是包含它是一个很好的做法,但PHP4支持没有访问修饰符的类,所以在遗留代码中看不到它们的使用是很常见的。
不,PHP没有包可见性,主要是因为直到最近PHP还没有包。
答案 2 :(得分:8)
默认为公开。原因可能是向后兼容,因为旧代码期望它是公开的(如果它不公开,它将停止工作)。
答案 3 :(得分:6)
默认可见性是PUBLIC
答案 4 :(得分:1)
不使用visibility关键字(public
,private
或protected
)时,方法将公开。但是,您不能以这种方式定义属性。对于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。