Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中类方法的默认可见性_Php_Oop_Visibility - Fatal编程技术网

PHP中类方法的默认可见性

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支持没有访

我看了一下答案,但似乎找不到答案

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

例如,在下面的代码中,
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适用于常量。