关于面向对象的OO和类的几个问题

Jas*_*vis 3 php oop class

我正在学习OO和类,我对PHP中的OO和类有几个问题

  1. 据我所知,扩展另一个类的类只是意味着扩展另一个类的类可以访问变量/属性以及它所扩展的类的函数/方法.它是否正确?

  2. 我知道静态方法或属性基本上与类外的过程函数或变量相同,并且几乎可以在任何地方使用.它是否正确?

  3. Public表示任何类都可以访问它,Private表示仅封装的类或者从可以访问和使用的所有者扩展的类.它是否正确?

zom*_*bat 11

1)是的,这是正确的.子类继承其父级的任何protectedpublic属性和方法.声明的任何内容private都不能使用.

2)这是事实.只要加载了类(这与以前的自动加载问题相符),您可以通过作用域解析运算符(::)访问静态方法,如下所示: ClassName::methodName();

3)你有public正确的含义,但正如我前面提到的,private方法只能由声明它们的类使用.

class parentClass
{
     private $x;
     public $y;
}

class childClass extends parentClass
{    
    public function __construct() {
        echo $this->x;
    }
}

$z = new childClass();
Run Code Online (Sandbox Code Playgroud)

上面的代码将导致NOTICE触发错误,因为childClass无法访问$ x.

注意:未定义的属性:childClass :: $ x

如果声明了$ x protected,那么childClass就可以访问了.编辑:声明为protected声明它的类以及扩展它的任何子类可以访问的属性,否则不会访问"外部世界".这是public和之间的一个很好的中间private.