i漂泊

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4243|回复: 0

整理protected、private、static、public

[复制链接]
TA的礼物信息
  • 收到:0
  • 送出:2
发表于 2013-3-19 16:20:52 | 显示全部楼层 |阅读模式
私有,主要是只用于类的内部访问。实例化一个类,那么这个类是不同调用私有属性和方法的。
所以,记住。当你想让某个属性和方法只在内部进行使用的时候就可以声明为private

私有的对立面就是公共。公开的。好理解了。

静态的,表示不实例化该类就可以使用该属性和方法了。将实例化看成是一个动态化的过程。那么,就容易理解静态方法方法和属性的作用了。

为什么需要定义成静态的?不实例化就使用,这样的好处是什么?

在类中定义属性和方法是static。只知道这样做可以实现打两个冒号,不实例化类就可以调用属性和方法了。

现在,怎么理解普通的函数,也就是不在类中情况下使用static定义成静态变量呢?
  1. static $a;
  2. var $a;
复制代码
上面两种方式的区别在于:

使用static的话就会在内存中开辟一块固定的区域作为地址。所以才说是静态的变量。而第二种方式却不是开辟固定的区域。
因为,静态变量仅在局部函数域中存在。所以,只有在函数中定义各自定义者两种变量,才能明确体会和区分他们。

如下:
  1. <?php
  2. function Test()
  3. {
  4.     $a = 0;
  5.     echo $a;
  6.     $a++;
  7. }
  8. ?>
  9. /*
  10. 特点:每次调用该函数结束后,变量a在内存中开辟的空间会释放掉。
  11. */

  12. <?php
  13. function Test()
  14. {
  15.     static $a = 0;
  16.     echo $a;
  17.     $a++;
  18. }
  19. ?>
  20. /*
  21. 特点:每次调用该函数结束后,变量a在内存中开辟的空间不会释放掉。虽然a的值会被改变。但还是原来的地址。这就是静态的概念。地址的静态性。而不是值的静态性(值还是可以被修改的,所以跟常量比,它仍然是变量。)
  22. */

  23. 深入理解如下代码:
  24. Test();
  25. Test();
  26. Test();
  27. echo $a;//输出的结果不是3,因为这里已经是新的变量了。函数里面的变量a是不能在外部使用的。


  28. //要想使用累加的结果,可以这样使用:
  29. Test();
  30. Test();
  31. $a = Test();

  32. echo $a;
复制代码
private与protected的区别:

受到保护的,就是不能被外部类所调用。只能被内的内部调用。
私有的,不能被继承。只能本类调用。它的子类不能调用。
本质区别:是否可以被继承。不能被外部类调用,这些都是一样的。而是否可以被继承,就意味着,子类是否能够调用它。

protected受到保护。就是不能被子类所继承。表现的效果是,只能在所定义的类中使用,而且是以$this的方式调用。

private表现的形式也是$this。但是,它能够被子类所调用。我们常常看到在子类中也会用到$this
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|IPiaoBo Inc. ( 渝ICP备17002826号 )

GMT+8, 2024-5-5 15:36 , Processed in 0.045635 second(s), 46 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表