• PHP self与static区别


    this,static和self。

    self和this还是很好区分的,可是self和static就很糊涂了,两者都能调用静态的方法和属性,看似使用上没有什么太大的分别,但是实际上分别很大,先来看下面这一段代码:

          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();
    

     输出结果:

    下面我们稍作修改代码:

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

     输出结果:

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

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

    准确说,这是后期静态绑定的功能。后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding call)的类名。当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分);

  • 相关阅读:
    Android框架之路——OkGo的使用
    recyclerview23+出现多个item只显示第一个item的问题
    Spark MLlib回归算法LinearRegression
    Spark MLlib聚类KMeans
    Impala性能优化
    Impala通过JDBC方式访问
    Impala与HBase整合
    Impala数据处理(加载和存储)
    Impala SQL
    Impala储存与分区
  • 原文地址:https://www.cnblogs.com/huixuexidezhu/p/7196235.html
Copyright © 2020-2023  润新知