用简单的英语,PHP中如何使用$this
?
在JavaScript中这对我来说是一个如此简单的概念,但由于某些原因在PHP中我无法理解这个变量及其功能。在任何给定的点上,它指的是完全?我只有OOP的三级经验,我怀疑这就是为什么我很难理解它的用法,但我想要变得更好,我检查的很多代码都使用这个变量。
答案 0 :(得分:15)
进入对象的函数后,您可以完全访问其变量,但要设置它们,您需要比仅使用要使用的变量名更具体。要正确指定要使用局部变量,需要使用特殊的$this
变量,PHP始终将其设置为指向您当前使用的对象。
例如:
function bark()
{
print "{$this->Name} says Woof!\n";
}
每当你进入一个对象的函数时,PHP会自动设置包含该对象的$this
变量。您无需执行任何操作即可访问它。
$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();
?>
<强>输出:强>
$this is defined (A)
$this is not defined.
$this is defined (B)
$this is not defined.
答案 1 :(得分:2)
详细说明shamittomar:
$这是一个句柄,可以引用调用的当前对象。(所以它基本上指向自己。假设我们有同一个类的多个对象,我们想要设置它在我们做最终动作之前(不同的)数据:回应它。 当你不知道对象名称时,很难指出自己。
class SaySomething{
private $the_line;// the variable exists only in this class!
public function __construct($myline){
$this->the_line = $myline;
// see how it points to itself?
// would there be a variable in the global scope then it would be not possible to "setup"
// the object without it getting overwritten in the next setup.
}
//The function to echo the stuf. Can be callid by the "outside world"
public function say_it(){
echo $this->the_line;
$this->add_exclamation();//call the function add_exclamation in this class/object.
}
//This function can not be called by the outside world because it's private.
// The only way to call it is from inside this class. To point to this class and call the function:
// $this->add_exclamation();
private function add_exclamation(){
echo "!";
}
}
$obja = new SaySomething('my');
$objb = new SaySomething('sample');
$objc = new SaySomething('super');
$objd = new SaySomething('text');
//Mind: uptill nothing has been said, only the private variable $the_line has been set in the constructor.
$obja->say_it();
$objc->say_it();
$objb->say_it();
$objd->say_it();
要了解一个类和一个对象是什么(它们往往混淆了很多......)观看此幻灯片: http://www.slideshare.net/sebastian_bergmann/understanding-the-php-object-model