What does the variable $this mean in PHP?

I see the variable $this in PHP all the time and I have no idea what it's used for. I've never personally used it.

Can someone tell me how the variable $this works in PHP?

250173 次浏览

它是对当前对象的引用,最常用于面向对象的代码。

例如:

<?php
class Person {
public $name;


function __construct( $name ) {
$this->name = $name;
}
};


$jack = new Person('Jack');
echo $jack->name;

This stores the 'Jack' string as a property of the object created.

与许多其他面向对象语言一样,它是从类自身内部引用类实例的方法。

来自 PHP 文档:

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

它引用当前类的实例,如 Meder所说。

参见 PHP 文档。它在第一个例子中有解释。

当你创建一个类,你有(在许多情况下)实例变量和方法(又名。功能)。$this 访问这些实例变量,这样你的函数就可以获取这些变量,并且可以对它们做任何你想做的事情。

Meder 的例子的另一个版本:

class Person {


protected $name;  //can't be accessed from outside the class


public function __construct($name) {
$this->name = $name;
}


public function getName() {
return $this->name;
}
}
// this line creates an instance of the class Person setting "Jack" as $name.
// __construct() gets executed when you declare it within the class.
$jack = new Person("Jack");


echo $jack->getName();


Output:


Jack

了解 PHP 中 $this变量的最好方法是在不同的上下文中对解释器进行尝试:

print isset($this);              //true,   $this exists
print gettype($this);            //Object, $this is an object
print is_array($this);           //false,  $this isn't an array
print get_object_vars($this);    //true,   $this's variables are an array
print is_object($this);          //true,   $this is still an object
print get_class($this);          //YourProject\YourFile\YourClass
print get_parent_class($this);   //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
print_r($this);                  //delicious data dump of $this
print $this->yourvariable        //access $this variable with ->

因此,$this伪变量具有 Current Object 的方法和属性。这种方法很有用,因为它允许访问类中的所有成员变量和成员方法。例如:

Class Dog{
public $my_member_variable;                             //member variable


function normal_method_inside_Dog() {                   //member method


//Assign data to member variable from inside the member method
$this->my_member_variable = "whatever";


//Get data from member variable from inside the member method.
print $this->my_member_variable;
}
}

$this引用了解释器为您创建的 PHP Object,它包含一个变量数组。

如果在普通类的普通方法中调用 $this,则 $this返回该方法所属的 Object (类)。

如果上下文没有父对象,则 $this可能是未定义的。

Net 有一个大页面讨论 PHP 面向对象编程以及 $this如何根据上下文执行。 Https://www.php.net/manual/en/language.oop5.basic.php

我知道这是个老问题,不管怎样,对 $这个的另一个确切的解释。$这个主要用于引用类的属性。

例如:

Class A
{
public $myname;    //this is a member variable of this class


function callme() {
$myname = 'function variable';
$this->myname = 'Member variable';
echo $myname;                  //prints function variable
echo $this->myname;              //prints member variable
}
}

output:

function variable


member variable

$this对调用对象的引用(通常是方法所属的对象,但如果从辅助对象的上下文静态地调用方法,则可能是另一个对象)。

$this 是一个特殊的变量,它引用相同的对象即。

它实际上引用了当前类的实例

这里有一个例子可以澄清上面的陈述

<?php
class Books {
/* Member variables */
var $price;
var $title;


/* Member functions */
function setPrice($par){
$this->price = $par;
}


function getPrice(){
echo $this->price ."<br/>";
}


function setTitle($par){
$this->title = $par;
}


function getTitle(){
echo $this->title ." <br/>";
}
}
?>

让我们看看如果不使用 $this 并尝试使用实例变量和 constructor arguments with the same name with the following code snippet

<?php


class Student {
public $name;


function __construct( $name ) {
$name = $name;
}
};


$tom = new Student('Tom');
echo $tom->name;


?>

它只是在回响

<?php


class Student {
public $name;


function __construct( $name ) {
$this->name = $name; // Using 'this' to access the student's name
}
};


$tom = new Student('Tom');
echo $tom->name;


?>

这与“汤姆”相呼应

这是很长的详细解释。我希望这将有助于初学者。我会使它非常简单。

首先,让我们创建一个类

<?php


class Class1
{
    

}

如果只使用 php 代码,可以省略 php 结束标记 ?>

现在让我们在 Class1中添加属性和方法。

<?php


class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";


public function Method1()
{
return "I am Method 1";
}
}

属性只是一个简单的变量,但是我们给它名称属性,因为它在类中。

方法只是一个简单的函数,但是我们说方法是因为它也在类中。

public关键字意味着可以在脚本中的任何地方访问方法或属性。

Now, how we can use the properties and the method inside Class1 ?

The answer is creating an instance or an object, think of an object as a copy of the class.

<?php


class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";


public function Method1()
{
return "I am Method 1";
}
}


$object1 = new Class1;
var_dump($object1);

我们创建了一个对象,即 $object1,它是 Class1及其所有内容的副本。我们用 var_dump()转储了 $object1的所有内容。

This will give you

object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }

所以 Class1的所有内容都在 $object1中,除了 Method1,我不知道为什么在转储对象时没有显示方法。

现在,如果我们只想访问 $property1,该怎么办。很简单,我们做 var_dump($object1->property1);,我们只是加上 ->property1,我们指向它。

我们也可以访问 Method1(),我们做 var_dump($object1->Method1());

Now suppose i want to access $property1 from inside Method1() , i will do this

<?php


class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";


public function Method1()
{
$object2 = new Class1;
return $object2->property1;
}
}


$object1 = new Class1;
var_dump($object1->Method1());

我们创建了 $object2 = new Class1;,它是 Class1的一个新拷贝,或者我们可以说是一个实例。然后我们从 $object2指向 property1

return $object2->property1;

这将在浏览器中打印 string(15) "I am property 1"

而不是在 Method1()里面做这个

$object2 = new Class1;
return $object2->property1;

We do this

return $this->property1;

$this对象在类中用于引用类本身。

它是创建新对象然后像这样返回它的一种替代方法

$object2 = new Class1;
return $object2->property1;

另一个例子

<?php


class Class1
{
public $property1 = 119;
public $property2 = 666;
public $result;


public function Method1()
{
$this->result = $this->property1 + $this->property2;
return $this->result;
}
}


$object1 = new Class1;
var_dump($object1->Method1());

我们创建了两个包含整数的属性,然后添加它们并将结果放入 $this->result中。

别忘了

$this->property1 = $property1 = 119

它们具有同样的价值

I hope that explains the idea.

This series of videos will help you a lot in OOP

Https://www.youtube.com/playlist?list=ple30vg_fg4osehh6brf8fra7wmoamuzlv

通常,在类中使用 这个关键字,通常在成员函数中使用 这个关键字访问当前对象的类(变量或函数)的非静态成员。

  1. this keyword should be preceded with a $ symbol.
  2. 对于这个操作符,我们使用-> 符号。
  3. 然而,$this 将引用特定实例的成员变量和函数。

让我们举一个例子来理解 $this 的用法。

<?php
class Hero {
// first name of hero
private $name;
    

// public function to set value for name (setter method)
public function setName($name) {
$this->name = $name;
}
    

// public function to get value of name (getter method)
public function getName() {
return $this->name;
}
}


// creating class object
$stark = new Hero();


// calling the public function to set fname
$stark->setName("IRON MAN");


// getting the value of the name variable
echo "I Am " . $stark->getName();
?>

OUTPUT: 我是钢铁侠

注意: 静态变量充当全局变量,并在类的所有对象之间共享。非静态变量特定于在其中创建它们的实例对象。