PHP中的$this代表什么?

12

可能是重复的问题:
PHP: self vs this

你好, 你能帮我理解PHP变量名$this的含义吗?

谢谢您的帮助。


2
可能是重复问题:https://dev59.com/DXVC5IYBdhLWcg3w51hv。另外,请在提问时不要太可爱。 ;) - wkl
2
恭喜12岁时就能拓展自己的知识!但既然这与问题无关,你能否编辑问题并将其删除? - Michael Paulukonis
似乎 Stack Overflow 上的人不知道“我12岁了,这是什么”是什么意思。 - JAL
2
这怎么算是重复问题呢?他并不是在比较 self$this 的用法,而是想知道 $this 具体代表什么意思。 - RobertPitt
3个回答

17

$this 指的是当前所在的类。

例如:

Class Car {

    function test() {
        return "Test function called";
    }

    function another_test() {
        echo $this->test(); // This will echo "Test function called";
    }
}

希望这能帮到你。


这是一种引用自身的方式...或者从自身调用方法或读取变量的方式。 - jodm
5
实际上,self 指的是你当前所在的类。而 $this 则指的是你当前所在类的对象实例。 - Stephen Watkins
由于您正在访问test成员变量(不存在),而不是test()方法,因此它不会echo“Test functioned called”。 您需要将其更改为echo $this->test()... - ircmaxell
真正起作用的不是“类”,而是“对象”——类的一个实例。 - Pointy
1
实际上,它是该类的一个实例,而self会静态地引用该类,__CLASS__则会将类名作为字符串引用 :-) - prodigitalson
@jodm,我编辑了问题并添加了所需的括号,希望你不介意。 - Adriano Varoli Piazza

2

1

$this 是一个受保护的变量,用于对象内部,$this 允许您在类文件内部访问。

示例

Class Xela
{
   var age; //Point 1

   public function __construct($age)
   {
      $this->setAge($age); //setAge is called by $this internally so the private method will be run
   }

   private function setAge($age)
   {
      $this->age = $age; //$this->age is the variable set at point 1
   }
}

这主要是变量作用域问题,$this 只能在已经初始化并且引用该对象及其父级的对象内部使用,您可以运行私有方法和设置私有变量,而在作用域外部则不行。

self 关键字也很类似,除了它指的是 内的静态方法,静态基本上意味着您不能使用 $this,因为它还不是一个对象,您必须使用 self::setAge();,如果那个 setAge 方法被声明为静态的,则您不能从该对象/ 对象 的实例中调用它。

以下是一些让您入门的链接:


虽然我理解您正在向一个面向对象编程的新手解释,请不要将对象称为类。$this用于引用对象属性和方法,而self::用于引用类属性和方法。我认为解释这两者之间的区别非常重要。 - Craige

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接