面向对象三大特性

  面向对象三大特性:

    1.封装;  2.继承; 3.多态

 

  封装:

    目的:为了让类更加安全。

    步骤:

      1.将成员变量变为private,不能从外界访问;

      2.在类里面做一个成员方法来间接访问;

      3.在该方法里面加限制条件。

  方法一:

class Ren{
    public $name;
    public $sex;
    public $birthday;
    private $age;
    public function setage($age){
        if($age>=18 && $age<=50){
            $this->age = $age;
        }
    }
    public function getage(){
        return $this->age;
    }
}
$r = new Ren();
$r->name = "张三";
$r->setage = 20;

  方法二:魔术方法

class Ren{
    public $name;
    public $sex;
    public $birthday;
    private $age;
        public function __set($name,$value){
        if($name=="age"){
            if($value>=18 && $value<=50){
                $this->$name = $value;
            }
        }else{
            $this->$name = $value;
        }
    }    
    public function __get($name){
        return $this->$name;
    }
}
$r = new Ren();
$r->name = "张三";
$r->age = 20;   //自动调用魔术方法__set
echo $r->age;   //自动调用魔术方法__get
var_dump($r);

    其中__set($name,$value)中第一个值为变量名,第二个为变量值。

 

  继承:

    概念:子类可以继承父类的一切,且可扩展自己的内容(父类不需要太具体)。

    特点:单继承,即一个子类只能有一个父类,同一个父类可以有多个子类。

  制作一个父类:

class Ren{
    public $name;
    public $sex;
    public function say(){
        echo "人在讲话";
    }
}

  制作子类:

class China extends Ren{
    public $yuyan;
    public function say(){
        //调用父类里面的方法
        parent::say();
        echo "你好";
    }
}
$c = new China();
$c->say();

    子类:

      1.可扩展自己的内容;

      2.可以对父类的方法进行重写,即函数重写(override)

      重写(override)对比重载(overload):

        (1)重写即子类对父类的方法进行重写;

        (2)重载发生于强类型语言中,让一个方法实现多个功能;

          重载条件:①同名方法;  ②参数不同;  ③参数相同,类型不同。

 

  多态:

    概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候所表现出的不同,我们称为多态。

    条件:

      1.必须有集成存在;

      2.有重写存在;

      3.方法不同。

    多态一般出现在强类型语言中,分为运行多态和编译多态:

      运行多态指代码运行中出现的多态

      编译多态指的就是重载,重载在编译过程中会出现的不同。

    多态常发生在强类型语言中:同一类型,指向不同输出也不同,父类的引用完全可以指向子类的实例。

posted @ 2018-01-09 11:30  23滴雨  阅读(179)  评论(0编辑  收藏  举报