PHP深入学习--调用上下文和解析上下文

最近在研究公司业务代码,其中的RPC协议中的上下文不是很理解,就查找了下资料,记录一下

例1

class A{

    protected $value = 'class A value';

    public function printValue(){
        echo  $this->value;
    }
}

class B extends A{

    protected $value = 'class B value';

    public function printValue(){
        echo  $this->value;
    }

}

$app = new B();
$app->printValue();

#输出
class B value

 之前我的一片博客介绍了static、self还有$this三个之间的区别,想了解的可以看一下 

https://blog.csdn.net/TyphoonHao/article/details/93735846

$this此时就是的调用,就称为“调用上下文”

 例2

class A{

    protected static $value = 'class A value';

    public function printValue(){
        echo  self::$value;
    }
}

class B extends A{

    protected static $value = 'class B value';

    public function printValue(){
        echo  self::$value;
    }

}

$app = new B();
$app->printValue();

#输出
class A value

     类A和类B都定义了一个静态变量,当实例化B的时候,调用printValue方法时,B类中没有这个方法,但是由于面向对象特性,B类继承了A类,执行了A类中的printValue方法,此时执行了self的调用,成为“解析上下文”调用;而self指向本类,所以打印A类的value

例3

class A{

    protected static $value = 'class A value';

}

class B extends A{
    
    public function printValue(){
        echo  self::$value;
    }
}

$app = new B();
$app->printValue();

#输出
class A value

    类A中定义了静态变量value,B中没有定义,但是类B继承了A,然后实例化B去调用printValue方法时,self应该会去“解析上下文”,但是没有value属性,按说应该会报错,但是但打印出了A中的value,这就是由于PHP未严格执行上下文解析和上下文调用
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值