public $name; public $sex; public $iq=10; protected $money; protected $dna; const BIRTHPLACE='地球'; static public $counter=0;//静态属性,它是公共的资源和具体的实例没有关系 //构造函数 public function __construct($name,$sex){ self::$counter++; $this->name=$name; $this->sex=$sex; } protected function chew($food){ echo "{$food}已经被咀嚼完成!
"; } //抽象方法 abstract public function eat($food); static public function hello(){ echo '您好!我是来自'.self::BIRTHPLACE.'的人类
'; } } class Student extends Humanity { const BIRTHPLACE='火星'; public $studentId; public function test($subject){ echo "{$this->name}正在考{$subject}!
"; } public function eat($food){ $this->chew($food); echo "{$this->name}正在快速的吃{$food}!
"; } /*public function walkTheDog(Dog $a){ echo "作用是只能传过来Dog类的实例(对象)过来"; }*/ /*public function walkTheDog(array $a){ echo "作用是只能传过来数组过来"; } */ public function walkTheDog(callable $a=null){ echo "作用是只能传过来函数过来,注意:不想让他报错的话,的设置默认值null哦,注意:每一种运行,其他的都得注释哦比如函数运行,类的实例+数组的注释"; } } interface Dog { } class Huskies implements Dog { } function func1(){ echo ':))'; } $hanMM=new Student('韩梅梅','女'); $wW=new Huskies(); echo $hanMM->walkTheDog($hanMM->eat());
解析:
类型约束
是一个锦上添花的功能
我们在定义方法的时候,可以指定我们的参数必须接受什么类型的数据
注意:不能指定标量类型。
只能进去Dog的实例。
只能进去数组类型的数据
只能进去函数,并且需要形参默认值为null,不然会报错.