免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2723 | 回复: 4
打印 上一主题 下一主题

小弟测试了一下parent,::,$this,self的分别! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-09 03:13 |只看该作者 |倒序浏览
小弟测试了一下parent,::,$this,self的分别!
环境是apache2,php5.0.1,w2k
self的特点

  1. <?php
  2. class a
  3. {
  4.         public static $a1="我是类a";
  5.         function ca()
  6.         {
  7.                 echo "这是类a:".self::$a1;//self的特点是:只能访问静态变量(static)
  8.                 echo "
  9. ;";//输出结果:a1
  10.         }
  11. }
  12. $o=new a;
  13. $o->;ca();
  14. ?>;
复制代码

$this,parent的特点

  1. <?php
  2. class b
  3. {
  4.         public $b1="我是类b";
  5.         public static $b2="b2";
  6.         function cb()
  7.         {
  8.                 echo "这是类b:".$this->;b1;//最普通的访问方法;输出:b1
  9.                 echo "
  10. ;";
  11.                 echo $this->;b2;//$this就不能访问static变量了;没有任何输出
  12.         }
  13. }
  14. $b1=new b;
  15. $b1->;cb();
  16. class eb extends b
  17. {
  18.         function c()
  19.         {
  20.                 echo "这是类eb,执行多一次类b了:".parent::cb();
  21.                   echo "
  22. ;";
  23.                         //parent的意思是指向extends的b类,和b::cb()一样,
  24.                         //当然也可以使用b::cb()这样访问,但以后修改起来就会很麻烦
  25.         }
  26. }
  27. $eb1=new eb;
  28. $eb1->;c();
  29. ?>;
复制代码

::的特点

  1. <?php
  2. class t1
  3. {
  4.         function t1_fun()
  5.         {
  6.                 echo "我不是类,只是函数.怎样?!这是在没有实例化对象情况下输出的!";
  7.         }
  8. }
  9. t1::t1_fun();//这是::的特点,可以在没有实例对象时,就直接调用类里的函数,注意:纯粹是函数而已
  10. ?>;
复制代码

这是在PHP5版本里的情况,在PHP4里有点不同,有些也不能用!
只是有些地方不一样而已,这些"不一样"可能很容易给初学者弄混,容易走弯路!
希望小弟的这些分析对大家有用!

小弟也是第一次写文章,也是第一次写技术性文章!期盼着大家对我能诚恳的批评!谢谢!    

论坛徽章:
0
2 [报告]
发表于 2004-09-09 08:13 |只看该作者

小弟测试了一下parent,::,$this,self的分别!

是这样的。
我觉楼上的老大只是分析出了表面的现象,而且这种得出的结论会给自己造误解的。

首先可以肯定的是,你得出这些执行结果无疑是对的。
但是关系却并没有理顺。

先说:parent和self, 它们的正式名称是名称空间的指代,也就是说它的对象是类,并非是指代特定的对象。比如说在构造函数中需要先执行父类的构造函数,
即可使用:parent::__construct;
来完成。

$this, 它是一种对象的自身指代。在示例化对象的时候才有意义。和parent和self不在同一阵线上呢。

至于::,它是一种操作符啊。

论坛徽章:
0
3 [报告]
发表于 2004-09-09 13:00 |只看该作者

小弟测试了一下parent,::,$this,self的分别!

原帖由 "hongweig" 发表:
是这样的。
先说:parent和self, 它们的正式名称是名称空间的指代,也就是说它的对象是类,并非是指代特定的对象。比如说在构造函数中需要先执行父类的构造函数,
即可使用:parent::__construct;
来完成。

//这里我想说点:这样与a::__construct有区别吗?!也不是一样执行了父类的构造函数吗?!"a是父类"

$this, 它是一种对象的自身指代。在示例化对象的时候才有意义。和parent和self不在同一阵线上呢。 //这个我知道,也分析了,但忘了写上来..呵呵~~不好意思

至于::,它是一种操作符啊。..........


呵呵~~首先很感谢hongweig兄对我的帖子的注意,很高兴能下批评!
再次感谢!

有这样的分析,是因为看到有些例子把这几种东东都放在一起使用,
有时:
$this->;str1;
有时:
self:str1;
又有时:
a::b();
更有时:
parent::b()

小弟就给这些东东搞到有点混乱,所以特写这篇文章来说一下,不想有别的也想我那样搞到有点乱!
希望没误人子弟!

最后再次感谢hongweig兄的回复!
Thanks!

论坛徽章:
0
4 [报告]
发表于 2004-09-13 13:42 |只看该作者

小弟测试了一下parent,::,$this,self的分别!

parent ::Name 是对父级类,
ClassName::Name 是对某个类,
$this->;Name 是对当前对象——((比拟)相当于“$_SERVER['PHP_SELF']”)
self::Name 是本身——((比拟)相当于“__FILE__”)
longnetpro 该用户已被删除
5 [报告]
发表于 2004-09-14 00:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP