引出问题
class Human {
public static function whoami() {
echo '来自父类的whoami在执行<br />';
}
public static function say() {
self::whoami(); // 子类内没有say方法,找到了父类这里
// 在这里的self 指的是 父类
}
public static function say2() {
static::whoami(); // 子类也没有say2方法,又找到父类这里
// 但是父类用static::whoami,
// 指调用你子类自己的whoami方法
}
}
class Stu extends Human{
public static function whoami () {
echo '来自子类的whoami在执行<br />';
}
}
Stu::say();
Stu::say2();
说明:如果子类也没有whoami()方法,则say2()最后调用的也是父类
延迟绑定再复习
知识点
类常量/静态属性/方法 –> 都是存放在类空间的
类常量用 const来定义
延迟绑定:
是指类的计算self的定义不是以定义时为准,而是以运行时的计算结果为准.
class Animal {
const age = 1;
public static $leg = 4;
public static function cry() {
echo '呜呜<br />';
}
public static function t1() {
self::cry();
echo self::age,'<br />';
echo self::$leg,'<br />';
}
public static function t2() {
static::cry();
echo static::age,'<br />';
echo static::$leg,'<br />';
}
}
class Human extends Animal {
public static $leg = 2;
public static function cry() {
echo '哇哇<br />';
}
}
class Stu extends Human {
const age = 16;
public static function cry() {
echo '嘤嘤<br />';
}
}
Stu::t1(); //呜呜,1,4
Stu::t2(); // 嘤嘤,16,2