【问题标题】:How to explain 'this' keyword in a best and simple way?如何以最佳和简单的方式解释“this”关键字?
【发布时间】:2011-01-06 20:01:13
【问题描述】:

我长期使用“this”关键字。但是当有人要我解释它时,我很困惑如何解释它。我知道我可以在类的方法中使用它来访问同一类的任何变量和方法。

    class MyClass{

      function MyMethod1(){
        echo "Hello World";
      }

      function MyMethod2(){
        $this->MyMethod1();
      }

    }

它是不是我们不需要初始化的类的对象,只能在类或其他任何东西中使用。如何解释?

谢谢

【问题讨论】:

标签: php oop this


【解决方案1】:

类是对象的模具:它指定对象的外观(变量)以及它可以做什么(函数)。

如果你实例化一个类:你创建一个对象。如果您创建类,您可以使用“this”来引用对象本身。这就是你不能设置“this”的原因,因为它与对象有关。这是一个特殊的只读变量。

【讨论】:

  • 这是一个特殊的只读变量,可用于引用对象本身。对吗?
【解决方案2】:

this 引用类的当前对象实例。

this 是传递给类方法的隐式参数:它的作用域是方法,并允许访问对象的所有成员。

【讨论】:

  • 可能不够基本,但从技术上讲这是最正确的答案。
【解决方案3】:

正如他们的名字所暗示的,实例方法在一个类的instances上运行。他们怎么知道要对哪一个进行手术?这就是this 参数的用途。

当你调用一个实例方法时,你实际上是在无形地传递了一个额外的参数:调用它的对象。例如,当你有这个时:

class Basket {
  public function a() {
    $this-> ...;
    // ...
  }
  // ...
}

你打电话给$some_basket->a(),在幕后你实际上是在打电话给Basket::a($some_basket)。现在a() 知道您想使用哪个Basket。那个特殊的参数就是this 所指的:你正在处理的当前对象。

【讨论】:

    【解决方案4】:

    短: $this 使您可以访问类中的对象变量(和方法)Edit: :) Edit 2:(但不在类的静态方法中):D

    【讨论】:

    【解决方案5】:

    有几个人用类似的术语解释过它,但我想补充一点,当与不熟悉面向对象编程的人交谈时,我解释说类定义是蓝图,就像房子一样,“this”是那时你正在使用的实际房子。可能还有其他房子看起来完全一样,但这是特定的对象(房子)。

    【讨论】:

      【解决方案6】:

      类是对象的模板或“模具”。

      让我们使用经典的“自行车”示例。那里有很多哈菲自行车。但是,我们已经创建了一辆自行车,我们可以使用“this”关键字来指代“this”自行车。

      在更专业的意义上,类是将要实例化的对象的模板。在运行时,当一个对象被实例化或创建了它自己的实例后,我们可以在内部使用关键字“this”来引用运行该方法的实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 2013-01-25
        • 1970-01-01
        相关资源
        最近更新 更多