self::who()和static::who()的区别在于self指的本类,即父类A,而static会根据代码实际情况判断指的是B类。
<?php
class A {
public static function who()
{
echo "AAA";
}
public static function test()
{
static::who(); //之后的结果为BBB,若用self::who(),则结果为AAA
} //因为子类B调用父类的test方法,又调用who方法,子类父类都有who方法,用static是调用子类的who方法,用self是调用父类(也就是self所在类的)who方法
}
//子类
class B extends A {
public static function who()
{
echo "BBB";
}
}
B::test(); //因为这里是B,所以父类A和子类B都有who方法我们也要调用子类B的who方法,
调用静态方法self:: 与static::的区别
selft代表自身;static可以实现后期绑定
class A {
public static function who()
{
echo "A类的who方法";
}
public static function test()
{
self::who();//输出A类的who方法
static::who();//后期绑定输出B类的who方法 }
}
class B extends A {
public static function who()
{
echo "B类的who方法";
}
}
self - 本身(静态)
parent - 父类(静态)
static - 后期绑定(静态)
static会根据上下文调用静态方法(因此截图中b::test()会调用class b 重写后的who())
?!important
this是对象,parent和self是类,self是自身这个类,parent是父类,static是上下文中的当前类,不知道这样理解对不对。
static 静态后期绑定 可根据上下文确定现在正在被调用的类
self 只能调用当前类中的静态属性或者方法 不能按照上下文进行后期静态绑定
static在类中的延迟静态绑定;
延迟静态绑定是指允许在一个静态继承的上下文中引用被调用类。延迟绑定的意思为:static::不再为定义当前方法所在的类,而是实际运行时所在的类。注:它可以用于(但不限于)静态方法的调用。
类方法的后期静态绑定
后期的Static方法
static 静态后期绑定 可根据上下文确定现在正在被调用的类
self 只能调用当前类中的静态属性或者方法 不能按照上下文进行后期静态绑定
调用自身的静态方法 用 self:: 调用父类的静态方法 用 parent::