面向对象三大特性: 封装,继承,多态

面向对象的三大特性:封装,继承,多态。

一、封装:目的:如何做类,让类更安全。

让一些成员变量不能被外界直接被访问。

方法:

1.将成员变量变为private。
2.在类里面做一个成员方法来间接访问。
3.在该方法里面加限制条件
4. 标准情况下每一个成员变量都要做封装。

class Ren{
    public $name;
    public $sex;
    public $birthday;
    private $age;   //将成员变量变为private
    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);
    var_dump($r);

为了简化用 

魔术方法:

public function __set($name,$valus){
  if($name=="age"){
    if($value>=18 && $value<=50){
      $this->$name = $value;
}else{
   $this->$name = $vaule;  

}
}
   
}

public function __get($name){
  return $this->$name;
}

$r->age =20 //自动调用魔术方法__set
echo $r->age;//自动调用魔术方法__get

 

二、继承
概念:子类可以继承父类的一切。父类起到指导性的作用。
特点:单继承(一个子类只能有一个父类,一个父类可以有多个子类)

关键字: extends 

class Ren{
    public $name;
    public $sex;
    public function say(){
        echo "人在讲话";
        }
    }
class China extends Ren{  //有父类的所有内容
  public $yuyan; //扩展自己的内容
  
  public function say(){
//函数重写:子类可对父类的函数重写。
    parent::say();  //调用父类里面的方法
    echo "你好";
}
  public function test(){ //函数重载:同名方法,参数个数不同或类型不同,实现不同功能
    echo "测试";
}

  public function test($a){
    echo "aaaa";
}

  
  public function test($a,$b){
    echo "bbbbb";
}
 

}
$c = new China(); $c->say();

重写:子类可对父类的函数重写。override

重载:一个方法多个功能,因为参数个数不同。方法名相同,参数个数不同。也叫编译多态。overload

 

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

 

posted @ 2018-01-10 11:22  niushuangmeng  阅读(165)  评论(0编辑  收藏  举报