<?php
/*
PHP面向对象接口笔记
-- 某个类实现(implements)了某个接口和继承(extends)了某个类的区别
1.实现接口跟继承类很类似,但是接口不能直接创建自己的对象;如果创建了'IcanEat'这个接口的对象,那么具体怎么吃根本不知道
2.继承的父类必须有该方法的具体实现,子类可以重写父类的方法,也可以不重写
3.接口里面的方法是不需要具体实现的,只要定义了方法的名称和参数就可以了,具体的实现必须在实现类中定义
-- 一句话概括:类的方法必须有实现,接口的方法必须为空
*/
// interface 关键字用于定义接口
interface IcanEat{
// 接口里面的方法不需要有方法的实现
public function eat($food);
}
// implements关键字用于表示类实现某个接口
class Human implements IcanEat{
// 实现了某个接口之后,必须提供接口中定义的方法的具体实现
public function eat($food){
echo 'Human eating for '.$food.'<br>';
}
}
class beast implements IcanEat{
public function eat($food){
echo 'Dog Like eating '.$food.'<br/>';
}
}
class Women implements IcanEat{
public function eat($food){
}
}
$obj=new Human();
$obj->eat('mokey');
$dog=new beast();
$dog->eat('bone');
$women=new Women();
$women->eat('d');
// 接口是不能实例化的,所以这行会报错
// Fatal error: Cannot instantiate interface IcanEat
// $testInter=new IcanEat();
// 可以用instanceof 关键字来判断某个对象是否实现了某个接口
function CheckEat($obj){
if($obj instanceof IcanEat){
$obj->eat('food');
}else{
echo 'Eat() Not\'s ok<br/>';
}
}
CheckEat($obj);
// 接口也是可以继承的,但是子类必须要实现父类的方法,才能继续添加使用自己的方法
interface IcanSlp extends IcanEat{
public function eat($food);
public function sleep();
}
?>