框架路由中间件常用到
<?php
interface RendererInterface
{
public function renderData();
}
abstract class Decorator implements RendererInterface
{
protected $wrapped;
public function __construct(\RendererInterface $wrapped){
$this->wrapped = $wrapped;
}
}
class RenderInXml extends Decorator{
public function renderData(){
$arr = $this->wrapped->renderData();
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return htmlspecialchars($xml);
}
}
class RenderInJson extends Decorator{
public function renderData(){
return json_encode($this->wrapped->renderData());
}
}
class Webservice implements RendererInterface
{
protected $data;
public function __construct($data){
$this->data=$data;
}
public function renderData(){
return $this->data;
}
}
$web = new Webservice(['name'=>'zs','age'=>23]);
echo (new RenderInJson($web))->renderData();
echo (new RenderInXml($web))->renderData();