PHP面向对象之接口编程

这两天在看一些关于PHP接口方面的资料,总结如下:

一、接口的定义和作用:

1、定义:接口规定了那些实现它的类,是抽象类的实体,其方法必须被全部实现。
使用方法如下:

<?php 
	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(),"<br>";
    }
}
    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的接口存在两个不足,一是没有契约限制,二是缺少足够多的内部接口。

你可能感兴趣的:(PHP,接口)