总结:self,parent的用法

self: 本类(不要理解成本对象)
parent: 父类

在引入自身的静态属性/静态方法,以及父类的方法时,可以用到

用法:

  • self::$staticProperty
  • self::$staticMothed
  • parent::$staticProperty
  • parent::Mothed
<?php
/*
class Human{
	static public $head = 1;

	public function say(){
		echo Human::$head,'<br />';
	}
}

echo Human::$head,'<br />';

$lisi = new Human();
$lisi->say();

*/

//某一天,类名要统一,规范化,Human不叫Human了,叫cHuman
//导致类内部,凡引用到自身类名的也要改

class cHuman{
	static public $head = 1;

	public function say(){
		echo self::$head,'<br />';
	}

	public function show(){
		echo "hello",'<br />';
	}
}

echo cHuman::$head,'<br />';

$lisi = new cHuman();
$lisi->say();



class Stu extends cHuman{
	static public $head = 2;

	public function say(){
		echo self::$head,'<br>';
		echo '父类只有',parent::$head,'<br />';
	}
}

$ming = new Stu();
$ming->say();


echo "=====\$this还是parent::==<br>";
class a{
	public function a1(){
		echo "this is calss function al<br>";
	}
}

class b extends a{
	public function b1(){
		$this->a1();
	}

	public function b2(){
		parent::a1();
	}
}

$b = new b();
$b->b1();
$b->b2();

//==================
/*

上面2个调用,显示效果是一样的,
如果从速度角度看,理论上parent::稍快一点点
因为在子类寻找a1方法,寻找不到,再去其父类寻找

但是从面向对象的角度看,继承过来的,就是自己的.
$this 更符合面向对象的思想 

举个反例:

class a{
}

class b extends a{
}

class c extends b{
}

....
....
....

class f extends d{
    parent::parent::...
}
*/