批改状态:合格
老师批语:
抽象类:设计类与实现类是分离的,抽象类可以给子类提供一些公用的方法,作为子类的重写模板来使用
abstract class Father{public $name;abstract public function eat();public function say(){return "my name is {$this->name}";}public function __construct($n){$this->name=$n;}}class Son extends Father{//重写eat方法public function eat(){return "I'm eating";}}$obj = new Son("admin");echo $obj->say();echo '<hr>';echo $obj->eat();echo '<hr>';echo $obj->name;
在类里面,不管是普通类还是抽象类都是单继承,即一个子类只能继承一个父类,但是实际开发中,我们会需要一个子类继承多个父类,这种情况下就可以使用接口来实现,接口也是多态的一种。
类常量
- 类常量使用 const 关键字声明
- 关键字后面直接跟常量名称不需要加$符
- 一般默认所有字母大写
- 类常量的值不允许更改
- 类常量会默认为静态成员
>
interface Father{const NAME = 'admin';public static function eat($name);}class Son implements Father{public static function eat($name){return "I'm eating".$name.self::NAME;}}// $obj = new Son();echo Son::eat('php&');echo '<hr>';
在普通类与普通方法中,可以使用$this将属性或方法与当前实例化的类绑定,但是静态方法的self只能与当前所在的类绑定,如果想要实现与普通方法中$this 相同的效果,就需要用到后期静态绑定也叫延迟静态绑定,使用 static 关键字调用
class Father{public function demo(){return "Father 下的demo方法";}public function test(){return $this->demo();}}class Child extends Father{public function demo(){return "Child 下的demo方法";}}$father = new Father();$child = new Child();echo $father->test();echo '<hr>';echo $child->test();echo '<hr>';echo '后期静态绑定';echo '<hr>';class Father1{public static function demo(){return "Father 下的demo方法";}public function test(){return static::demo();}}class Child1 extends Father1{public static function demo(){return "Child 下的demo方法";}}$father1 = new Father1();$child1 = new Child1();echo $father1->test();echo '<hr>';echo $child1->test();
class Father{public $name = 'admin';protected $age = 18;public function __get($param){if(!empty($this->$param)){return '您访问的属性是:'.$param.'值是:'.$this->$param;}else{return "参数不存在";}}public function __set($param,$values){if(!empty($this->$param)){echo '您要修改的属性是:'.$param.'值改为了:'.$values;return $this->$param = $values;}else{echo "参数不存在";}}}$obj = new Father();echo $obj->age;echo '<hr>';$obj->age = 28;
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号