什么是PHP后期静态绑定,PHP后期静态绑定

介绍

PHP中后期静态绑定的此功能用于在静态继承中引用类。当调用静态方法时,类名将与范围解析运算符(::)附加在一起,而在其他实例方法的情况下,我们使用对象名来调用它们。static ::不会使用定义方法的类来解析,而是使用运行时信息来计算。对当前类的静态引用是使用函数所属的类(而不是定义其的类)来解析的

示例

在以下代码中,父类使用self ::前缀调用静态方法。与子类调用时相同的方法未引用子类名称,因为它无法解析

示例<?php

class test1{

public static $name="Raja";

public static function name(){

echo "类名称:" . __CLASS__;

}

public static function getname(){

self::name();

}

}

class test2 extends test1{

public static function name(){

echo "类名称:" . __CLASS__;

}

}

test2::getname();

?>

输出结果

结果显示再次期望,返回父类的名称类名称:test1

使用static ::而不是self ::在运行时创建后期绑定

示例<?php

class test1{

public static function name(){

echo "类名称:" . __CLASS__;

}

public static function getname(){

static::name();

}

}

class test2 extends test1{

public static function name(){

echo "类名称:" . __CLASS__;

}

}

test2::getname();

?>

上面的代码现在按预期返回子类的名称

输出结果类名称:test2

在非静态上下文中使用static ::

父级中的私有方法被复制到子级,因此其作用域仍将是父级

示例<?php

class test1{

private function name(){

echo "类名称:" . __CLASS__ ."\n";

}

public function getname(){

$this->name();

static::name();

}

}

class test2 extends test1{

//

}

$t2=new test2();

$t2->getname();

?>

输出结果

输出显示以下结果类名称:test1

类名称:test1

但是,当父方法被覆盖时,其范围会改变

示例class test3 extends test1{

private function name() {

/* original method is replaced; the scope of name is test3 */

}

}

$t3 = new test3();

$t3->name();

输出结果

输出显示以下异常PHP Fatal error: Uncaught Error: Call to private method test3::name() from context ''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值