一、定义一个接口并完善它
<?php
interface iPerson
{
const NAME = '人类';
public function name ();
public function age ();
public function sex ();
}
class Person implements iPerson
{
public $name;
public $age;
public $sex;
public function __construct(string $name, int $age, string $sex)
{
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
public function name () : string
{
return "我的名字是:{$this->name},";
}
public function age () : string
{
return "性别:{$this->sex},";
}
public function sex () : string
{
return "年龄:{$this->age}。";
}
}
$p = new Person('张三', 25, '男');
echo $p->name().$p->age().$p->sex();
二、定义一个抽象类
<?php
abstract class aFunction
{
const FUNCTION = '功能';
abstract public function eat ();
abstract public function say ();
abstract public function work ();
}
class aPerson extends aFunction
{
public function eat ()
{
return '每个人都需要吃饭';
}
public function say ()
{
return '每个人都会说话';
}
public function work ()
{
return '每个人都需要工作';
}
}
$ap = new aPerson;
echo "每一个人类都具备的".aPerson::FUNCTION.":{$ap->eat()},{$ap->say()},{$ap->eat()}。";
抽象类:
- 定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的;
- 继承一个抽象类的时候,非抽象子类必须定义父类中的所有抽象方法;
- 调用方式必须匹配,即类型和所需参数数量必须一致。
接口
- 要实现一个接口,使用 implements 操作符。非抽象类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
- 可以同时继承抽象类和实现接口,extends要写在前面.
- 抽象类实现接口,不需要重新其中的方法。
- 实现多个接口时,接口中的方法不能有重名。
- 接口也可以继承,通过使用 extends 操作符。
- 类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误。