【问题标题】:PHP: Property visibilty, static, etc [closed]PHP:属性可见性、静态等 [关闭]
【发布时间】:2011-12-23 06:40:11
【问题描述】:

我知道这是一个非常愚蠢的问题,但我不太了解某些东西,我每天都在使用它们,但我不确定它们是如何工作的。

class Bootstrap
{
public static $frontController = null;
public static $root = '';

public static、protected、public...所有这些有什么区别?以及何时最好使用其中的每一个...

最好的问候

【问题讨论】:

  • 你能让你的标题更好吗? (更具描述性,你也不需要在标题中用 PHP 标记它,因为我们有标签)。 ty :)
  • 我不确定这对 SO 来说是否是一个好问题 - OOP 的原理从一本书(当然,或者在线文章)中系统地学习要容易得多。维基百科文章提供了一个概述,但很难消化:en.wikipedia.org/wiki/Object_(computer_science)

标签: php oop


【解决方案1】:
  • static 表示该值是通过 self::$var 而不是 $this->var 访问的,不是特定于实例的(即它也可用于静态方法),因此非常适合单例和类似模式
  • public var 可以从任何地方访问,即从班级内部和外部访问
  • protected var 只能从类内部以及从定义 var 的类继承的类中访问
  • private var 只能从类内部访问

由于您询问的是 OOP 基础知识,因此这里还有一些值得解释的关键字:

  • abstract 类不能实例化,只能用作基类;包含抽象方法的类必须是抽象的,从抽象类继承的类必须是抽象的,除非基类的所有抽象方法都实际实现了
  • 不能从 final 类继承

【讨论】:

  • 如果声明一个受保护的变量,我不能在静态方法中访问它,只有那些被声明为静态的..或者它必须是受保护的静态?
【解决方案2】:

Public/private/protected 指可见性;

http://php.net/manual/en/language.oop5.visibility.php

静态是指类的成员是与类本身相关联还是与类的实例相关联;

http://www.php.net/manual/en/language.oop5.static.php

这些都是语言关键字。

http://php.net/manual/en/reserved.keywords.php

http://en.wikipedia.org/wiki/Keyword_%28computer_programming%29

【讨论】:

    【解决方案3】:

    公开和保护是可见性。 public 每个人都可以访问,protected 只有继承和父类可以访问。

    静态是所有对象共有的变量,而不是每个类都有自己的,而是被所有对象“共享”。

    现在到另一个问题,什么时候使用它:

    • 所有属性都应该是私有的,以防止它们被恶意使用。
    • 所有 getter 和 setter 方法都应该是公共的,以便其他对象可以设置和获取值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-22
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      相关资源
      最近更新 更多