学习框架遇到适配器问题,做下记录
1.类适配器,以继承为主要方式,扩展原有的类
interface class1
{
function f1();
function f2();
}
interface class2
{
function f3();
function f4();
}
class class3 implements class1
{
public function f1(){
echo "f1";
}
public function f2(){
echo "f2";
}
}
class class4 extends class3 implements class2{
public function f3(){
echo "f3";
}
public function f4(){
echo "f4";
}
}
$ob = new class4();
$ob->f1();
$ob->f2();
$ob->f3();
$ob->f4();
2.对象适配器,以基础类的对象传递方式扩展新的类
interface class1
{
function f1();
function f2();
}
interface class2
{
function f3();
function f4();
}
class class3 implements class1
{
public function f1(){
echo "f1";
}
public function f2(){
echo "f2";
}
}
class class4 implements class2{
private $obj;
public function __construct(class1 $obj){
$this->obj = $obj;
}
public function __call($func, $args)
{
if (is_callable(array($this->obj, $func))) {
return $this->obj->$func($args);
}
}
public function f3(){
echo "f3";
}
public function f4(){
echo "f4";
}
public function f5(){
echo "f5";
}
}
$ob = new class4(new class3());
$ob->f1();
$ob->f2();
$ob->f3();
$ob->f4();
$ob->f5();