面向对象 - 延迟静态绑定

  • 作者:KK

  • 发表日期:2017.5.29


新手不用太注意记这个

学一遍了解了情况,记得就记得,不记得也算了吧,以后用到这个知识的时候再回来看,或者下次重新复习时加固就好,简单了解一遍就好


只调用自己的方法

class A{
	public static function test1(){
		return 'aaa';
	}
	
	public static function test2(){
		echo self::test1();
	}
}

class B extends A{
	public static function test1(){
		return 'bbb';
	}
}

B::test2(); // aaa

虽然B类重写了A类的test1方法返回了bbb,但是test2方法在A里面,通过self关键字指定了必须调用自己的方法,这个自己指谁呢?self关键字用在A类里,所以其实就是指A类咯,于是B类重写了test1的时候也不用它了


如果子类重写了这个方法,那就用子类的

class A{
	public static function test1(){
		return 'aaa';
	}
	
	public static function test2(){
		echo static::test1();
	}
}

class B extends A{
	public static function test1(){
		return 'bbb';
	}
}

B::test2(); // bbb

注意test2方法里之前的self换成了static,这就是本文标题所说的延迟静态绑定特性,如果B类没有重写,那它就会用A类的,否则就用B类的

其中self和static关键字通常都用在调用静态方法(static function)的场合,可以将static::方法名()$this->方法()的作用概念是差不多的,$this的时候也是子类有重写就用子类的