【发布时间】:2011-04-11 10:41:05
【问题描述】:
我看到一些脚本在一个具有 OOP 的 PHP 脚本中包含 $this,我从来不知道它的含义......就像
$this->refresh();
或许可以向我解释一下$this 指的是...?
但我知道你不能将它用作像$this_is_a_variable 这样的动态变量,但为什么不能将它用作动态变量呢?
【问题讨论】:
我看到一些脚本在一个具有 OOP 的 PHP 脚本中包含 $this,我从来不知道它的含义......就像
$this->refresh();
或许可以向我解释一下$this 指的是...?
但我知道你不能将它用作像$this_is_a_variable 这样的动态变量,但为什么不能将它用作动态变量呢?
【问题讨论】:
$this 是对当前对象的引用。
只能在类方法中使用。
当从对象上下文中调用方法时,伪变量 $this 可用。 $this 是对调用对象的引用(通常是方法所属的对象,但也可能是另一个对象,如果该方法是从辅助对象的上下文中静态调用的)。
一个简单的现实世界示例:
class Classname
{
private $message = "The big brown fox... jumped....";
function setMessage($givenMessage) {
$this->message = $givenMessage;
}
function getMessage() {
return $this->message; // Will output whatever value
// the object's message variable was set to
}
}
$my_object = new Classname(); // this is a valid object
echo $my_object->getMessage(); // Will output "The big brown fox... jumped...."
$my_object->setMessage("Hello World!");
echo $my_object->getMessage(); // Will output "Hello world"
当您在 static 上下文中调用方法时,$this不可用:
Classname::showMessage(); // Will throw an error:
// `$this` used while not in object context
【讨论】:
$this 的信息。谢谢。 :D
如果你在做 OOP,那么你就使用类。您可以:
class CFoo
{
private $var;
public function setFoo($fooVal)
{
$this->var = $fooVal;
}
}
$this 指的是该类的当前对象。
【讨论】:
在 PHP 中创建类时,有时您可能需要引用类* 本身。 $this 变量为此目的而保留。
**这应该是正确的,因为“引用创建的对象”而不是类。这在语义上更正确。*
例如:
class Car
{
private $make;
public function setMake($make)
{
$this->make = $make;
}
public function setModel($model)
{
$this->model = $model;
}
public function whatCar()
{
return "This car is a " . $this->make . " " . $this->model;
}
}
使用它看起来像:
$car = new Car();
$car->setMake('Ford');
$car->setModel('Escort');
echo $car->whatCar();
//This car is a Ford Escort
【讨论】:
$this 引用了给定类的 object。要引用 类 本身,请使用 __CLASS__ 魔术常量。
$this 指的是类的当前对象。 $this 用于作为特定类成员的方法。因此,在这些方法中,该方法已经具有有关该类的特定“实例”的信息。因此 $this 可以直接用于引用当前对象,而不是检索对象并将其分配给不同的变量。
【讨论】: