PHP中类方法的默认可见性
我看了一下答案,但似乎找不到答案 PHP中没有可见性声明的方法的默认可见性是什么?PHP是否具有Java中的包可见性 例如,在下面的代码中,PHP中类方法的默认可见性,php,oop,visibility,Php,Oop,Visibility,我看了一下答案,但似乎找不到答案 PHP中没有可见性声明的方法的默认可见性是什么?PHP是否具有Java中的包可见性 例如,在下面的代码中,go()public还是private class test { function go() { } } 我问这个问题的原因是,我见过许多构造函数编写为function\uu-construct(),还有一些编写为public function\uu-construct()。它们相等吗?默认为公共。始终包含它是一个很好的实践,但是PHP4支持没有访
go()
public还是private
class test {
function go() {
}
}
我问这个问题的原因是,我见过许多构造函数编写为
function\uu-construct()
,还有一些编写为public function\uu-construct()
。它们相等吗?默认为公共。始终包含它是一个很好的实践,但是PHP4支持没有访问修饰符的类,因此在遗留代码中通常看不到它们的使用
不,PHP没有包可见性,主要是因为直到最近PHP还没有包。默认值是public。原因可能是由于旧代码希望它是公共的(如果它不是公共的,它将停止工作),所以向后兼容 类方法可以定义为public、private或protected。在没有任何显式可见性关键字的情况下声明的方法被定义为public 默认可见性是公共的
函数构造()
和公共函数构造()
与方法名相同
如果无法定义方法名称的前缀,则默认情况下应为public。如果未使用关键字(public
、private
或protected
),则方法将为public。但是,不能以这种方式定义属性。对于,您需要在声明中附加可见性关键字
对于未在类中声明且在方法中为其赋值的属性,将具有公共可见性
<?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
}
}
伊恩:我之所以这么说是因为“显式优于隐式”(正如作者所说)。这会导致其他程序员浪费脑筋去思考构造函数是私有的还是公共的,或者是什么。如果人们总是使用访问修饰符,那么最初的海报可能甚至不会问这个问题。同样值得注意的是,在Java等语言上,如果默认值是包私有的,人们总是想知道它是设计上的包私有的,还是开发人员只是忘记了指定它(特别是在与不太资深的开发人员打交道时)。这就是为什么PMD包含这样的规则:同样的规则适用于PropertiesName适用于常量。