【问题标题】:What is the meaning of $this$这个是什么意思
【发布时间】:2011-04-11 10:41:05
【问题描述】:

我看到一些脚本在一个具有 OOP 的 PHP 脚本中包含 $this,我从来不知道它的含义......就像

$this->refresh();

或许可以向我解释一下$this 指的是...?

但我知道你不能将它用作像$this_is_a_variable 这样的动态变量,但为什么不能将它用作动态变量呢?

【问题讨论】:

标签: php variables


【解决方案1】:

$this 是对当前对象的引用。

只能在类方法中使用。

来自the manual:

当从对象上下文中调用方法时,伪变量 $this 可用。 $this 是对调用对象的引用(通常是方法所属的对象,但也可能是另一个对象,如果该方法是从辅助对象的上下文中静态调用的)。

一个简单的现实世界示例:

class Classname
{
  private $message = "The big brown fox... jumped....";

  function setMessage($givenMessage) {
    $this->message = $givenMessage;
  }

  function getMessage() {
    return $this->message;  // Will output whatever value 
                            // the object's message variable was set to
  }
}

$my_object = new Classname();  // this is a valid object
echo $my_object->getMessage();  // Will output "The big brown fox... jumped...."

$my_object->setMessage("Hello World!");
echo $my_object->getMessage();  // Will output "Hello world"
当您在 static 上下文中调用方法时,

$this可用:

Classname::showMessage(); // Will throw an error: 
                          // `$this` used while not in object context

【讨论】:

  • 嗯,这是一个非常快的答案 Pekka :P 我会阅读手册,我不知道在 PHP 手册/文档中哪里可以找到关于 $this 的信息。谢谢。 :D
  • 我很确定 showMessage 会显示“棕色的大狐狸……跳了……”而不是“Hello World!”。你的意思可能是 $my_object->message
  • 对于类成员,'var' 的使用应该替换为'private' 甚至是'protected'。 (见php.net/manual/en/language.oop5.properties.php
  • 我已经更新了这个答案以使用 getter 和 setter,这对于基本类来说更常见:)
【解决方案2】:

如果你在做 OOP,那么你就使用类。您可以:

class CFoo
  {
  private $var;
  public function setFoo($fooVal)
    {
    $this->var = $fooVal;
    }
  }

$this 指的是该类的当前对象。

【讨论】:

    【解决方案3】:

    在 PHP 中创建类时,有时您可能需要引用类* 本身。 $this 变量为此目的而保留。

    **这应该是正确的,因为“引用创建的对象”而不是类。这在语义上更正确。*

    例如:

    class Car
    {
        private $make;
    
        public function setMake($make)
        {
             $this->make = $make;
        }
    
        public function setModel($model)
        {
             $this->model = $model;
        }
    
        public function whatCar()
        {
            return "This car is a " . $this->make . " " . $this->model;
        }
    }
    

    使用它看起来像:

    $car = new Car();
    
    $car->setMake('Ford');
    $car->setModel('Escort');
    
    echo $car->whatCar();
    //This car is a Ford Escort
    

    【讨论】:

    • 我意识到我在这里吹毛求疵,但$this 引用了给定类的 object。要引用 本身,请使用 __CLASS__ 魔术常量。
    • 我为我的错误加了一个给你。我会留下错误以供参考,但你是对的。
    【解决方案4】:

    $this 指的是类的当前对象。 $this 用于作为特定类成员的方法。因此,在这些方法中,该方法已经具有有关该类的特定“实例”的信息。因此 $this 可以直接用于引用当前对象,而不是检索对象并将其分配给不同的变量。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 2017-05-25
      • 2010-10-03
      • 2013-02-21
      • 2015-01-09
      • 2011-10-12
      • 2015-06-22
      • 1970-01-01
      相关资源
      最近更新 更多