PHP self与static区别

来源:互联网 发布:淘宝网店计划 编辑:程序博客网 时间:2024/05/20 09:25

在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就是调用的当前调用的类,比较抽象吧。

0 0