self与static、get_class()与get_called_class()区别

在日常项目代码中,大家一定经常能看到self、static、get_class、get_called_class()的使用,但不一定都知道它们的区别,本文就以个人理解来说明一下。

1、self与static

self指向的是当前类,既self代码所在类;static首先指向调用类,既谁调用static所在类的代码就指向谁,一般指向子类。如果没有子类,则与self相同指向的是当前类;

示例:

<?php
 
class Father{
    protected  static $name = "father";
    public static function whoami_self(){
        echo self::$name."\n";
    }
     
    public static function whoami_static(){
        echo static::$name."\n";
    }
     
    public static function getInstance_self(){
        return new self();
    }
     
    public static function getInstance_static(){
        return new static();
    }
}
 
class FatherBrother extends Father{
    protected  static $name = "uncle";
}
 
FatherBrother::whoami_self(); //father
FatherBrother::whoami_static(); //uncle
var_dump(FatherBrother::getInstance_self()); //father
var_dump(var_dump(FatherBrother::getInstance_static())); //uncle

2、get_class()与get_called_class()

get_class()指向当前类,get_called_class()指向调用类,与上述self与static类似;

示例:

    class Foo{
      public function test(){
         var_dump(get_class());
      }
 
      public function test2(){
        var_dump(get_called_class());
      }
 
      public static function test3(){
        var_dump(get_class());
      }
 
      public static function test4(){
        var_dump(get_called_class());
      }
   }
 
   class B extends Foo{
 
   }
 
   $B=new B(); 
   $B->test(); //Foo
   $B->test2(); //B
   Foo::test3(); //Foo
   Foo::test4(); //Foo
   B::test3(); //Foo
   B::test4(); //B

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值