这两天在看一些关于PHP接口方面的资料,总结如下:
一、接口的定义和作用:
1、定义:接口规定了那些实现它的类,是抽象类的实体,其方法必须被全部实现。
使用方法如下:
interface employee{
public function working();
}
class teacher implements employee{
public function working(){
echo 'teaching',PHP_EOL;
}
}
class coder implements employee{
public function working(){
echo 'coding',PHP_EOL;
}
}
function print_object(employee $i){
$i->working();
}
$a = new teacher();
$b = new coder();
print_object($a);
print_object($b);
?> 2、作用:接口起强制规范和契约的作用,不允许调用接口中本不存在的方法。接口的编写和实现可以分开。
二、PHP的接口
php是弱类型语言,强调灵活,不推荐大规模使用接口,因为PHP的接口失去了一些接口应该有的特性,比如PHP只关心是否实现了这个方法,而不关心语义是否正确。
三、一些特例:
Iterator迭代器接口,只要实现了这个接口,就可以使对象用于foreach结构,如DirectoryIterator类。
代码如下:
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $key => $value) {
if(!$value->isDir()){
echo $value->getFileName(),"\t",$value->getSize(),"
";
}
} Trait可以被视为一种加强型的接口。代码如下:
trait Hello{
public function sayHello(){
echo "Hello ";
}
}
trait World{
public function sayWorld(){
echo "World";
}
}
class MyHelloWorld
{
use Hello,World;
public function sayExclamationMark(){
echo "!";
}
}
$myobject = new MyHelloWorld();
$myobject->sayHello();
$myobject->sayWorld();
$myobject->sayExclamationMark(); 四、总结
接口作为一种规范和契约存在,保证可用性和可控性。
接口是一个声明,使用了该接口就必须实现它。
PHP的接口存在两个不足,一是没有契约限制,二是缺少足够多的内部接口。