【问题标题】:couple of questions about OO and classes in PHP关于 OO 和 PHP 中的类的几个问题
【发布时间】:2009-09-11 03:34:12
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你问了很多非常好的问题。继续加油!

标签: php class oop


【解决方案1】:

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错误,因为$x不能被childClass访问。

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

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

【讨论】:

  • 好的,谢谢你的澄清,我现在明白了,除了受保护的,我需要继续阅读
  • +1 - 我喜欢你提到的受保护关键字的事实。我想回答这个问题,但是当你有这么棒的答案时,我想,这有什么意义。
  • 其次,我也喜欢这个答案。我也喜欢 @jasondavis 提出了很多关于 OOP 的好问题。
  • @karim79 谢谢,我的项目很大,如果我要将它从程序方式切换到使用类等等,那么我真的需要在开始大切换之前尽快学习这些东西
  • 只是第 2 点的一个小补充:如果使用范围解析运算符访问类的函数,则无法使用 $this 访问变量或方法,因为该对象从未初始化。
【解决方案2】:

对于 1. 据我了解,扩展另一个类的类仅意味着扩展另一个类的类可以访问它所扩展的类的变量/属性和函数/方法。这是正确的吗?

ANS: 没错,但这还不是全部。扩展类也可以通过重写扩展类的方法来自定义扩展类。当然,它还可以通过添加新的字段和方法来扩展超类的功能。

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

ANS: 是的,这是正确的,正如 zombat 所说,只要类是公共的并已加载,并且属性和方法是公共的。换句话说,您将类用作这些元素的名称空间。

对于3.Public是指任何类都可以访问,Private是指只有被封装的类或者继承自所有者的类可以访问和使用。这是正确的吗?

答: 将其视为物理属性,公共计算机(在图书馆)可供所有人使用,而您的私人计算机(可能)只能由您使用。

只是为了添加到 Zambat 评论中。

【讨论】:

    【解决方案3】:

    几乎不需要声明任何私有的东西,作为一般规则使用 protected 代替。

    【讨论】:

    • Private 是一种非常重要的数据隐藏机制。数据隐藏使程序更可靠,因为您可以确保除了您(编写类)之外没有其他人可以直接访问该属性。
    • 我并不是说私有属性/方法没有用处,关键是在绝大多数情况下,您都希望使用受保护的。您的类越可扩展,您的代码就越可重用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2012-01-26
    • 2015-05-10
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多