self与static的区别

来源:互联网 发布:对日外包软件企业 编辑:程序博客网 时间:2024/05/09 03:26

static 关键字,这里作为作用域引用。类似于parent, self等关键字。与parent和self不同的是,parent 引用的是父类作用域,self引用的是当前类的作用域,而static引用的是全部静态作用域,子类会覆盖父类,


<?php

/*self就是写在哪个类里面, 实际调用的就是这个类.
static代表使用的这个类, 就是你在父类里写的static,然后被子类覆盖,使用的就是子类的方法或属性*/
class Person
{
    public static function name()
    {
        echo "xiaosan";
        echo "<br />";
    }
    public static function callself()
    {
        self::name();
    }
 
    public static function callstatic()
    {
        static::name();
    }
}
 
class Man extends Person
{
    public static function name()
    {
        echo "gaojin";
        echo "<br />";
    }
}
 


Person::callself();  // output: xiaosan
Person::callstatic();  // output: xiaosan
Man::callself();  // output: xiaosan
Man::callstatic();  // output: gaojin

?>





<?php
/*self - 就是这个类,是代码段里面的这个类。
static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。*/
class A {
  public static function get_self() {
    return new self();
  }


  public static function get_static() {
    return new static();
  }
}


class B extends A {}


echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self());//A
echo get_class(A::get_static()); // A

原创粉丝点击