继承:

关键字:extends,使一个类继承并拥有另一个已经存在类的成员属性和方法,被继承的类称为父类或基类,继承类为子类;

public:       方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
protected:本类和子类可以访问,外部对象不可以调用。
private:      只能在本类访问,子类与外部对象都不可能调用。经过private标记的方法或者属性可以在继承类中重新定义,每一个类只能看到它自己定义                          的私有方法。

<?php
    header('content-type:text/html;charset=utf8');
    class father{   
        protected $name;   
        function __construct($name){
            //构造函数    
            $this->name=$name;   
        }      
        function work(){    
              echo "{$this->name}我在工作";  
          }   
          function __destruct(){
              //析构函数  
          } 
    }   
    class son extends father{  
        //继承父类  
        function play(){    
            echo "{$this->name}我在玩游戏";  
        }   
    }      
    $my_father=new father("爸爸");  //创建父类对象  $my_father->work();     
    $my_son=new son("儿子");   
    $my_son->work();   
    $my_son->play(); 
?>

 

PHP类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此PHP引入了接口技术;

一个类可以继承多个接口;一个类只能继承一个抽象类;

接口interface/implements:

接口定义:如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是public权限的,那么这种特殊的抽象类就叫接口;

接口使用interface关键字定义,并使用implements来实现接口的方法,且必须完全实现;

实现一个接口:

<?php
interface Fruit{
    const MAX_WEIGHT = 5;   //此处不用声明,就是一个静态常量
    function setName($name);
    function getName();
}
//实现接口
class Apple implements Fruit{
    private $name;
    function getName() {
        return $this->name;
    }
    function setName($_name) {
        $this->name = $_name;
    }
}

$apple = new Apple(); //创建对象
$apple->setName("苹果");
echo "创建了一个" . $apple->getName();
echo "<br />";
echo "MAX_GRADE is " . Apple::MAX_WEIGHT;   //静态常量
?>

实现多个接口:

<?php  
    interface IEmployee{...}  
    interface IDeveloper{...}  
    interface IPillage{...}  
    class Employee implements IEmployee,IDeveloper,iPillage {  
        ...  
    }  
    class Contractor implements IEmployee,IDeveloper {  
        ...  
    } 
?> 

抽象类和接口的区别
接口是一个特殊的抽象类,也可以看作是一个模型的规范。接口与抽象类大致区别如下:

    一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果继承一个抽象类,只需要实现需要的方法即可;
    如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,     只是变成了一个新的方法而已;
    抽象类只能单继承,当一个子类需要实现的功能需要继承多个父类时,就必须使用接口;