作者:芝See菇Bi([email protected])
小弟测试了一下parent,::,$this,self的分别! 环境是apache2,php5.0.1,w2k
self的特点 class a { public static $a1="我是类a"; function ca() { echo "这是类a:".self::$a1;//self的特点是:只能访问静态变量(static) echo " ";//输出结果:a1 } } $o=new a; $o->ca(); ?>
$this,parent的特点 class b { public $b1="我是类b"; public static $b2="b2"; function cb() { echo "这是类b:".$this->b1;//最普通的访问方法;输出:b1 echo " "; echo $this->b2;//$this就不能访问static变量了;没有任何输出 } } $b1=new b; $b1->cb(); class eb extends b { function c() { echo "这是类eb,执行多一次类b了:".parent::cb(); echo " "; //parent的意思是指向extends的b类,和b::cb()一样, //当然也可以使用b::cb()这样访问,但以后修改起来就会很麻烦 } } $eb1=new eb; $eb1->c(); ?>
::的特点
class t1 { public $tt1="tt1"; function t1_fun() { echo "我不是类,只是函数.怎样?!这是在没有实例化对象情况下输出的!"; echo $this->tt1;//在对象没有实例时,这样的调用是错误的! } } t1::t1_fun();//这是::的特点,可以在没有实例对象时,就直接调用类里的函数,注意:纯粹是函数而已 ?>
总结一下: parent,self,都只能访问static变量(属性) parent,能访问父类的方法 self,指的是类本身 ::可以在没有实例对象前调用类的方法(函数),但该方法中,不能$this访问变量 $this不能访问static变量,结果会没有输出
这是在PHP5版本里的情况,在PHP4里有点不同,有些也不能用! 只是有些地方不一样而已,这些"不一样"可能很容易给初学者弄混,容易走弯路! 希望小弟的这些分析对大家有用!
有这样的分析,是因为看到有些例子把这几种东东都放在一起使用, 有时: $this->str1; 有时: self::$str1; 又有时: a::b(); 更有时: parent::b()
小弟就给这些东东搞到有点混乱,所以特写这篇文章来说一下,不想有别的也想我那样搞到有点乱! 希望没误人子弟!
小弟也是第一次写文章,也是第一次写技术性文章!期盼着大家对我能诚恳的批评!谢谢! :) :) 
|