PHP中$ this的真正定义是什么?

时间:2016-10-02 15:36:41

标签: php

我目前正在使用PHP并且正在阅读PHP手册,但仍然有$ this的问题。

$ this是全局的还是只是构建对象的另一个变量名?

以下是一个例子:

public function using_a_function($variable1, $variable2, $variable3)
{
    $params = array(
        'associative1' => $variable1,
        'associative2' => $variable2,
        'associative3' => $variable3
    );
    $params['associative4'] = $this->get_function1($params);
    return $this->get_function2($params);
}

这对于返回函数有多好?我想我对这个函数的构建方式很困惑。我理解使用一个名为key names => value的名称来构建关联数组部分,但是$ this会在此示例中抛弃我。

2 个答案:

答案 0 :(得分:3)

UPDATE app a JOIN (SELECT d.DuplicateID, MAX(d.MasterId) as MasterId FROM Duplicates d GROUP BY d.DuplicateID ) d ON a.PlayerID = d.DuplicateID SET a.PlayerID = d.MasterID; 仅用于面向对象编程(OOP)并引用当前对象。

$this

在对象内部使用它来访问成员变量和方法。

class SomeObject{
    public function returnThis(){
        return $this;
    }
}

$object = new SomeObject();
var_dump($object === $object->returnThis()); // true

答案 1 :(得分:2)

它被称为Object范围,让我们使用一个示例类。

Class Example
{
    private $property;
    public function A($foo)
    {
         $this->property = $foo;
         // we are telling the method to look at the object scope not the method scope
    }
    public function B()
    {
         return self::property; // self:: is the same as $this
    }
}

我们现在可以实例化我们的对象,并以另一种方式使用它:

$e = new Example;
$e::A('some text');
// would do the same as
$e->A('some other text');

这只是访问Object范围的一种方法,因为方法无法访问其他方法范围。

您还可以扩展一个类并使用parent ::来调用类扩展范围,例如:

Class Db extends PDO
{
    public function __construct()
    {
        parent::__construct(....

哪个会访问PDO构造方法而不是自己的构造方法。

在您的情况下,该方法调用对象中的其他方法。哪个可以用$ this->来调用或者自我::