PHP self与static区别

PHP中,调用一个静态变量,我们既可以使用self也可以使用static,结果也许都是我们期望的,但是,有时候并不是我们所想的那样,static和self的区别还是很大的,下面我们进行代码来进一步说明它们之间的区别。

首先创建一个class:

 

[php] view plain copy
 
  1. <?php   
  2.   
  3.   
  4.   class Boo {  
  5.         
  6.       protected static $str = "This is class Boo";  
  7.         
  8.       public static function get_info(){  
  9.             
  10.           echo get_called_class()."<br>";  
  11.           echo self::$str;  
  12.       }   
  13.         
  14.         
  15.   }  
  16.   class Foo extends Boo{  
  17.         
  18.       protected static $str = "This is class Foo";  
  19.         
  20.   }  
  21.     
  22.     
  23.    Foo::get_info();  
  24.       
  25.   
  26. ?>  

这段代码应该跟我们期望的结果是一样的 输出调用的类是Foo,$str字符串内容This is class Boo:

 


下面我们稍作修改代码:

 

[php] view plain copy
 
  1. <?php   
  2.   
  3.   
  4.   class Boo {  
  5.         
  6.       protected static $str = "This is class Boo";  
  7.       /* 
  8.       public static function get_info(){ 
  9.            
  10.           echo get_called_class()."<br>"; 
  11.           echo self::$str; 
  12.       }  
  13.       */  
  14.       public static function get_info(){  
  15.             
  16.           echo get_called_class()."<br>";  
  17.           echo static::$str;  
  18.       }   
  19.         
  20.   }  
  21.   class Foo extends Boo{  
  22.         
  23.       protected static $str = "This is class Foo";  
  24.         
  25.   }  
  26.     
  27.     
  28.    Foo::get_info();  
  29.       
  30.   
  31. ?>  

我们再运行结果:

 



我们惊奇的发现结果不是我们预期的那样,为什么呢?

PHP官方也说过,大概意思是说self调用的就是本身代码片段这个类,而static调用的是从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类,例子比较容易明白些。

其实static就是调用的当前调用的类,比较抽象吧。

posted @ 2017-01-09 20:52  天涯海角路  阅读(108)  评论(0)    收藏  举报