你什么时候在PHP中使用$ this关键字?

时间:2010-12-21 16:35:03

标签: php oop

您何时会在PHP中使用$this关键字?据我所知$this指的是在不知道对象名称的情况下创建的对象。

关键字$this也只能在方法中使用吗?

如果您可以使用$this,那么展示一个很好的例子。

12 个答案:

答案 0 :(得分:6)

类可以包含自己的常量,变量(称为“属性”)和函数(称为“方法”)。

<?php
class SimpleClass
{
    // property declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}
?>

$ this伪变量的一些例子:

<?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo "\$this is not defined.\n";
        }
    }
}

class B
{
    function bar()
    {
        // Note: the next line will issue a warning if E_STRICT is enabled.
        A::foo();
    }
}

$a = new A();
$a->foo();

// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
$b = new B();
$b->bar();

// Note: the next line will issue a warning if E_STRICT is enabled.
B::bar();
?>

以上示例将输出:

  • $这是定义的(A)
  • $这未定义。
  • $ this is defined(B)
  • $这未定义。

答案 1 :(得分:3)

最常见的用例是在面向对象编程中,在类中定义或工作。例如:

class Horse {
    var $running = false;

    function run() {
        $this->running = true;
    }
}

正如您所看到的,在run函数中,我们可以使用$this变量来引用我们所在的Horse类的实例。所以要记住的另一件事是,如果你创建2个Horse类,每个类中的$this变量将引用Horse类的特定实例,而不是它们两者。

答案 2 :(得分:2)

如果您在PHP中进行面向对象编程,则只能使用$ this。这意味着如果您正在创建类。这是一个例子:

class Item {
  protected $name, $price, $qty, $total;

  public function __construct($iName, $iPrice, $iQty) {
    $this->name = $iName;
    $this->price = $iPrice;
    $this->qty = $iQty;
    $this->calculate();
  }

}

答案 3 :(得分:2)

$ this用于引用对象的当前实例。 所以你可以做以下事情:

class MyClass {
    private $name;

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

    //vs
    public function setName($pName) {
        $name = $pName;
    }
}

另一个很酷的用途是你可以链接方法:

class MyClass2 {
    private $firstName;
    private $lastName;

    public function setFirstName($name) {
        $this->firstName = $name;
        return $this;
    }

    public function setLastName($name) {
        $this->lastName = $name;
        return $this;
    }

    public function sayHello() {
        print "Hello {$this->firstName} {$this->lastName}";
    }
}

//And now you can do:
$newInstance = new MyClass2;
$newInstance->setFirstName("John")->setLastName("Doe")->sayHello();

答案 4 :(得分:1)

它用于面向对象编程(OOP):

<?php
class Example
{  
    public function foo()
    {
        //code
    }

    public function bar()
    {
        $this->foo();
    }
}
  

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

答案 5 :(得分:1)

有一次我知道我最终在其他语言中使用this等价物来实现'Fluent'界面;否则返回void的每个类方法都会返回this,因此方法调用可以很容易地链接在一起。

public function DoThis(){
    //Do stuff here...
    return $this;
}
public function DoThat(){
   //do other stuff here...
   return $this;
}

以上可以这样称呼:

myObject->DoThis()->DoThat();

这对某些事情有用。

答案 6 :(得分:1)

用于处理局部变量时。

您还可以从here了解更多相关信息。

function bark() {
    print "{$this->Name} says Woof!\n";
}

答案 7 :(得分:1)

在创建对象的新实例时使用

$ this

例如,想象一下:

class Test {
    private $_hello = "hello";

    public function getHello () {
        echo $this->_hello; // note that I removed the $ from _hello !
    }

    public function setHello ($hello) {
        $this->_hello = $hello;
    }
}

为了访问方法getHello,我必须创建一个类Test的新实例,如下所示:

$obj = new Test ();
// Then, I can access to the getHello method :
echo $obj->getHello ();
// will output "hello"

$obj->setHello("lala");
echo $obj->getHello ();
// will output "lala"    

实际上,$ this在课堂内使用,当实例化时。它被称为范围

在课堂上你使用 $ this (例如访问* $ _ hello *)但是在课堂之外, $ this 不会引用课堂内的元素(比如* $ _ hello *),它是 $ obj

现在, $ obj $ this 之间的主要区别是, $ obj 外部访问 strong>,会发生一些限制:如果您在类中定义私有受保护,例如我的变量* $ _ hello *, $ obj < strong> CAN NOT 访问它(它是私有的!)但是 $ this 可以,因为$这留在了课堂内。

答案 8 :(得分:0)

不,我认为你的想法是错误的。当引用同一个类的对象时使用$this ..像这样

我们认为我们有一个变量值$ var,而那个该对象的实例应该设置为5

$这 - &GT; VAR = 5;

答案 9 :(得分:0)

使用$ this来引用属于当前对象的方法或实例变量

$ this-&gt; name = $ name 要么 $这 - &GT; callSomeMethod()

将使用当前对象子类中实现的变量或方法。

如果您想专门调用父类的实现,您可以执行类似

的操作

父:: callSomeMethod()

答案 10 :(得分:0)

每当您要使用函数外部但在同一类内部的变量时,请使用$ this。这是一个核心的php概念。

答案 11 :(得分:-1)

setter