$this一般指向调用对象
代码如下
<?php
//$this 引用
class A
{
function foo()
{
if (isset($this)) {
echo '$this已经定义:类 (';
echo get_class($this);
echo ")<br/>";
} else {
echo "\$this没有定义.<br/>";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();//$this已经定义:类 (A)
A::foo();//$this没有定义.
$b = new B();
$b->bar();//$this已经定义:类 (B)
B::bar();//$this没有定义.
?>
//$this 引用
class A
{
function foo()
{
if (isset($this)) {
echo '$this已经定义:类 (';
echo get_class($this);
echo ")<br/>";
} else {
echo "\$this没有定义.<br/>";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();//$this已经定义:类 (A)
A::foo();//$this没有定义.
$b = new B();
$b->bar();//$this已经定义:类 (B)
B::bar();//$this没有定义.
?>
可以看出A的实例对象通过$a->foo()方式调用时,$this就指向了这个调用对象。
但是通过静态调用A::foo()不存在实例化情况,所有没有$this.
接着在$b->bar()的调用中,有个静态调用A::foo()这时$this指向了上下文中的对象$b.
于是下面的这个代码的运行结果很显然了。
<?php
class A
{
var $hello="Hello";
function aa()
{
echo $this->hello;
}
}
class B
{
var $hello="你好";
function bb()
{
A::aa();
}
}
$b1=new B();
$b1->bb();
?>
class A
{
var $hello="Hello";
function aa()
{
echo $this->hello;
}
}
class B
{
var $hello="你好";
function bb()
{
A::aa();
}
}
$b1=new B();
$b1->bb();
?>
本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/106081,如需转载请自行联系原作者