• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

PHP 类的三大特性

Data: 2019-05-27 13:41:58Form: JournalClick: 6

# PHP 类的三大特性

  • 继承:可以让某个类型的对象获得另一个类型的对象的属性和方法
  • 封装:指将客观事物抽象成类,每个类对自身的数据和方法实行保护
  • 多态:指同一个实体同时具有多种形式,它主要体现在类的继承体系中

# 一、继承

  • extends 关键词继承父类
class Teacher{
    public $name;
    public $school;
    // 构造方法
    public function __construct($name, $school){
        $this->name = $name;
        $this->school = $school;
    }
    public function fun1(){
        echo '姓名:灭绝师太,学校:PHP中文网<hr/>';
    }
    public function fun2(){
        return '姓名:灭绝师太,学校:PHP中文网<hr/>';
    }
    public function fun3(){
        // 在类中使用伪变量: "$this" 引用当前类的成员变量
        return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';
    }
    public function fun4(){
        // 在类中使用伪变量: "$this" 引用当前类的成员方法
        return $this->fun3();
    }
    // 析构方法
    public function __destruct(){
        echo '类执行完毕,要关闭了';
    }
}
// 子类代码复用
class PHPTeacher extends Teacher{

}
// 实例化
$obj = new PHPTeacher('西门大官人','PHP中文网');
echo $obj->fun3();

# 二、封装

  • public 默认的, 关键词定义类内、类外、子类都可见
  • protected 关键词定义类内、子类可见,类外不可见
  • private 关键词定义类内可见, 子类、类外不可见
class Teacher{
    protected $name;
    private $school;
    // 构造方法
    public function __construct($name, $school){
        $this->name = $name;
        $this->school = $school;
    }
    protected function fun1(){
        echo '姓名:灭绝师太,学校:PHP中文网<hr/>';
    }
    private function fun2(){
        return '姓名:灭绝师太,学校:PHP中文网<hr/>';
    }
    public function fun3(){
        // 在类中使用伪变量: "$this" 引用当前类的成员变量
        return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';
    }
    public function fun4(){
        // 在类中使用伪变量: "$this" 引用当前类的成员方法
        return $this->fun3();
    }
    // 析构方法
    public function __destruct(){
        echo '类执行完毕,要关闭了';
    }
}
// 子类代码复用
class PHPTeacher extends Teacher{
    public function fun5(){
        $this->fun1();
    }
    public function fun6(){
        $this->fun2();
    }
    public function fun7(){
        return $this->name;
    }
    public function fun8(){
        return $this->school;
    }
}
// 实例化
$obj = new Teacher('西门大官人','PHP中文网');
echo $obj->fun1();
echo $obj->fun2();
echo $obj->name;
echo $obj->school;

$obj2 = new PHPTeacher('西门大官人','PHP中文网');
echo $obj2->fun1();
echo $obj2->fun2();
echo $obj2->fun5();
echo $obj2->fun6();
echo $obj2->fun7();
echo $obj2->fun8();

# 三、多态

  • 实现多态的前提是要先继承,在重写父类方法
class Teacher{
    protected $name;
    private $school;
    // 构造方法
    public function __construct($name, $school){
        $this->name = $name;
        $this->school = $school;
    }
    protected function fun1(){
        echo '姓名:灭绝师太,学校:PHP中文网<hr/>';
    }
    private function fun2(){
        return '姓名:灭绝师太,学校:PHP中文网<hr/>';
    }
    public function fun3(){
        // 在类中使用伪变量: "$this" 引用当前类的成员变量
        return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';
    }
    public function fun4(){
        // 在类中使用伪变量: "$this" 引用当前类的成员方法
        return $this->fun3();
    }
    // 析构方法
    public function __destruct(){
        echo '类执行完毕,要关闭了';
    }
}
// 子类代码复用
class PHPTeacher extends Teacher{
    public function fun5(){
        $this->fun1();
    }
    public function fun6(){
        $this->fun2();
    }
    public function fun4(){
        return '我是重写的方法';
    }
}
$obj2 = new PHPTeacher('西门大官人','PHP中文网');
echo $obj2->fun4();
Name:
<提交>