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

时间:2009-09-11 03:34:13

标签: php class oop

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

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

  2. 我知道静态方法或属性与类外的过程函数或变量基本相同,几乎可以在任何地方使用。这是对的吗?

  3. Public表示任何类都可以访问它,Private表示只有封装的类或者从可以访问和使用的所有者扩展的类。这是对的吗?

3 个答案:

答案 0 :(得分: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();

上述代码将导致触发NOTICE错误,因为$ class无法访问$ x。

  

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

如果$ x被声明为protected,那么childClass就可以访问了。编辑:声明为protected的属性可由声明它的类以及扩展它的任何子类访问,但不能访问“外部世界”。这是publicprivate之间的一个很好的中间。

答案 1 :(得分:0)

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

ANS:这是正确的,但并非全部。扩展类还可以通过重写扩展类的方法来自定义扩展类。而且,它还可以通过添加新的字段和方法来扩展超类功能。

For 2.我知道静态方法或属性与类外的过程函数或变量基本相同,几乎可以在任何地方使用。这是对的吗?

ANS:是的,这是正确的,只要该类是公共的并加载并且属性和方法是公共的,zombat就会说。换句话说,您正在使用该类作为这些元素的名称空间。

For 3. Public表示任何类都可以访问它,Private表示只有封装的类或者从可以访问和使用的所有者扩展的类。这是对的吗?

ANS:将其视为物理属性,每个人都可以使用公共计算机(在图书馆),您的私人计算机(可能)只能由您使用。

刚加入Zambat评论。

答案 2 :(得分:-2)

几乎没有必要声明任何私有内容,因为一般规则使用受保护的。