PHP self与static区别

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

首先创建一个class:

<?php 


  class Boo {
	  
	  protected static $str = "This is class Boo";
	  
	  public static function get_info(){
		  
		  echo get_called_class()."<br>";
		  echo self::$str;
	  } 
	  
	  
  }
  class Foo extends Boo{
	  
	  protected static $str = "This is class Foo";
	  
  }
  
  
   Foo::get_info();
	

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


下面我们稍作修改代码:

<?php 


  class Boo {
	  
	  protected static $str = "This is class Boo";
	  /*
	  public static function get_info(){
		  
		  echo get_called_class()."<br>";
		  echo self::$str;
	  } 
	  */
	  public static function get_info(){
		  
		  echo get_called_class()."<br>";
		  echo static::$str;
	  } 
	  
  }
  class Foo extends Boo{
	  
	  protected static $str = "This is class Foo";
	  
  }
  
  
   Foo::get_info();
	

?>
我们再运行结果:



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

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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值