Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
抽象类:设计类与实现类是分离的,抽象类可以给子类提供一些公用的方法,作为子类的重写模板来使用
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;