变量$这在PHP中意味着什么?

时间:2009-10-06 03:45:08

标签: php oop this

我一直在PHP中看到变量$this,我不知道它用于什么。我从来没有亲自使用它,搜索引擎忽略了$,我最终搜索了“this”这个词。

有人可以告诉我变量$这在PHP中是如何工作的吗?

11 个答案:

答案 0 :(得分:114)

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

示例:

<?php
class Person {
    public $name;

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

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

这将'Jack'字符串存储为创建对象的属性。

答案 1 :(得分:32)

了解php中$this变量的最佳方法是询问PHP是什么。不要问我们,请问编译器:

print gettype($this);            //object
print get_object_vars($this);    //Array
print is_array($this);           //false
print is_object($this);          //true
print_r($this);                  //dump of the objects inside it
print count($this);              //true
print get_class($this);          //YourProject\YourFile\YourClass
print isset($this);              //true
print get_parent_class($this);   //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object

答案 2 :(得分:14)

我知道它的旧问题,无论如何另一个关于 $ this 的确切解释。 $ this 主要用于引用类的属性。

示例:

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
   }
}

输出:

function variable

member variable

答案 3 :(得分:8)

这是从内部引用类的实例的方法,与许多其他面向对象的语言相同。

来自PHP docs

  

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

答案 4 :(得分:6)

让我们看看如果我们不使用$ this并尝试使用实例变量,会发生什么 具有相同名称的构造函数参数,包含以下代码段

<?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;

?>

这回应了汤姆&#39;

答案 5 :(得分:3)

当你创建一个类时,你有(在很多情况下)实例变量和方法(也就是函数)。 $ 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

答案 6 :(得分:3)

$thisa reference to the calling object(通常是方法所属的对象,但如果从辅助对象的上下文中静态调用该方法,则可能是另一个对象)。

答案 7 :(得分:3)

这是详尽的详细解释。希望对初学者有所帮助。我将使其变得非常简单。

首先,让我们创建一个类

<?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";
    }
}

该属性只是一个简单的变量,但我们将其名称属性cuz命名为类。

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

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

现在,我们如何使用Class1中的属性和方法?

答案是创建实例或对象,将对象视为类的副本。

<?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及其所有内容的副本。然后,我们使用$object1转储了var_dump()的所有内容。

这会给你

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());

现在假设我想从$property1内部访问Method1(),我将这样做

<?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的新副本,也可以说是一个实例。然后我们从property1

指向$object2
return $object2->property1;

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

现在而不是在Method1()

内执行此操作
$object2 = new Class1;
return $object2->property1;

我们这样做

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());

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

别忘了

$this->property1 = $property1 = 119

它们具有相同的值..等等

我希望可以解释这个想法。

本系列视频将为您带来很多OOP

https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv

答案 8 :(得分:2)

$这是一个特殊变量,它指的是同一个对象,即。本身。

它实际上是指当前类的实例

这是一个清除上述陈述的例子

System.out.println("Los platos para el dia de hoy son:");
java.util.Arrays.asList(menu).forEach(System.out::println);

答案 9 :(得分:0)

它指的是当前类的实例,如 meder 所述。

请参阅PHP Docs。这是在第一个例子中解释的。

答案 10 :(得分:0)

通常,关键字在类内部使用,通常与成员函数一起用于访问当前对象的类的非静态成员(变量或函数)。

  1. 此关键字前面应带有$符号。
  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();
?>

输出: 我是钢铁侠

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