面向对象(一)

========概念=========

一、类与对象关系:

  1、类实例化对象

  2、类诞生对象

  3、类生产出对象

二、类的组成部分:

  1、属性(变量)

  2、方法(函数)

三、定义一个类:

  1、使用关键字class

  2、命名采用驼峰法

  3、造对象并调用属性和方法

 

class Person{
    public $name;
    public $age;

    public function __construct($n,$a){
        $this->name=$n;
        $this->age=$a;
    }

    public function say(){
        echo "my name is {$this->name},my age is {$this->age}";
    }
}

四、$this作用:永远代表本对象

五、构造方法:public function __construct(){}

       对象在诞生之前会触发

六、析构方法:public function __destruct(){}
       对象在消失之前会触发

注:类的方法中使用属性时,必须加上$this

========面向对象的三大特性===============

一、封装

1、封装的概念:隐藏属性、方法或实现细节的过程称为封装

2、类的封装修饰词:

    (1)、public:公开的(类外面可以访问,子类可以访问,父类可以访问)

    (2)、protected:被保护的(类外面不能访问,子类可以访问,父类可以访问)

    (3)、private:私有的(类外面不能访问,子类不能访问,父类可以访问)

3、类的封装作用:

    (1)、部分方法要对外开放.
    (2)、部分方法要对外封锁.

二、继承

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展

关键字:extends

对父类构造方法的继承

子类完成继承后,自动继承父类的属性和方法

三、多态

多态就是指一个类实例的相同方法在不同情形有不同表现形式。

<?php
//接口
interface Usb{
   public function load();
   public function start();
   public function unload();
}
class Upan implements Usb{//优盘
    public function load(){
        echo "Upan is load";
    }
    public function start(){
        echo "Upan is unloading";
    }
    public function unload(){
        echo "Upan is unloading";
    }
}

class Udisk implements Usb{//充电宝
    public function load(){
        echo "Udisk is load";
    }
    public function start(){
        echo "Udisk is unloading";
    }
    public function unload(){
        echo "Udisk is unloading";
    }
}
//盗版厂商的usb
class FalUsb{
    public function load(){
        echo "FalUsb is load";
    }
    public function start(){
        echo "FalUsb is unloading";
    }
    public function unload(){
        echo "FalUsb is unloading";
    }
}


//-------------------------------------
$obj1 = new Upan();
$obj2 = new Udisk();

$obj3 = new FalUsb();//盗版

/*
 * function useUsb($o){
        $o->load();
        $o->start();
        $o->unload();
        echo "<hr>";
    }
 */

function useUsb(Usb $o){//方法括号中规定$o必须是Usb的子类
    $o->load();
    $o->start();
    $o->unload();
    echo "<hr>";
}
useUsb($obj1);
useUsb($obj2);

useUsb($obj3);//这个会报错:Catchable fatal error: Argument 1 passed to useUsb() must implement interface Usb
?>

===============抽象类========

一、关键字abstract

二、含有抽象方法的类是抽象类

三、抽象方法:未被实现的方法(abstract public function unload();)

四、子类中必须实现父类的抽象方法,否则报错

abstract class Usb{
   public function load(){
      echo "usb is loading";
   }
   public function start(){
      echo "usb is starting";
   }
   abstract public function unload();//抽象方法
}

class Upan extends Usb{
    public function unload(){//子类中必须实现父类的抽象方法,否则报错
        echo "usb is unloading";
    }
}

===========接口==========

一、关键字interface

二、只含有抽象方法、不能含有普通方法

三、子类中必须实现接口的所有的抽象方法,否则报错

四、子类不能用extends继承,用implements实现接口

五、接口中的方法都是抽象方法,不能加abstract

//接口
interface Usb1{
   public function load();
   public function start();
   public function unload();
}

class Upan1 implements Usb1{//子类中必须实现父类的所有抽象方法,否则报错
    public function load(){
        echo "usb is load";
    }
    public function start(){
        echo "usb is unloading";
    }
    public function unload(){
        echo "usb is unloading";
    }
}

 

六、一个子类可以实现多个接口

//接口
interface Usb1{
   public function load();
   public function start();
   public function unload();
}
interface PressKey{
   public function run();
   public function say();
}
class Upan1 implements Usb1,PressKey{//一个子类可实现多个接口
    public function load(){
        echo "usb is load";
    }
    public function start(){
        echo "usb is unloading";
    }
    public function unload(){
        echo "usb is unloading";
    }
    public function run(){
        echo "usb is run";
    }
    public function say(){
        echo "usb is say";
    }

 

七、接口扩展,即一个子接口继承父类接口所有的抽象方法

//接口
interface Usb1{
   public function load();
   public function start();
   public function unload();
}
interface Usb2 extends Usb1{//接口也可以继承其他的接口
   public function run();
}
class Upan1 implements Usb2{
    public function load(){
        echo "usb is load";
    }
    public function start(){
        echo "usb is unloading";
    }
    public function unload(){
        echo "usb is unloading";
    }
    public function run(){
        echo "usb is run";
    }
}

 

posted @ 2018-07-22 16:09  所爱隔山隔海  阅读(144)  评论(0编辑  收藏  举报