Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:案例很棒
<?php
//在接口中定义一个常量和抽象方法
interface Data
{
const array = [
['姓名' => '胡八一', '年龄' => 40, '性别' => '男'],
['姓名' => '杨雪丽', '年龄' => 32, '性别' => '男'],
['姓名' => '胡八一', '年龄' => 28, '性别' => '女'],
['姓名' => '王凯旋', '年龄' => 31, '性别' => '男'],
['姓名' => '大金牙', '年龄' => 45, '性别' => '男'],
];
function result();
}
//定义一个trait,里面定义一个公用方法用于显示结果
trait Display
{
protected function show_p($text)
{
printf('<hr><pre>%s</pre><hr>', print_r($text, true));
}
}
//定义一个抽象类,该类引用了trait并定义了一个抽象方法
abstract class Norm
{
use Display;
abstract function format();
}
//定义一个工作类,内部的out方法接收Data类型的对象可以直接输出结果
class Output
{
public function out(Data $obje)
{
$obje->result();
}
}
//定义一个tab类,继承Norm类和Data接口,输出表格格式的数据
class Tab extends Norm implements Data
{
public function format()
{
return array_reduce(
Data::array,
function ($a, $b) {
return $a .= ('<tr>
<th>' . $b['姓名'] . '</th>
<th>' . $b['年龄'] . '</th>
<th>' . $b['性别'] . '</th>
</tr>');
},
'<table border="1" cellspacing="0"><tr><th>姓名</th><th>年龄</th><th>性别</th></tr>'
);
}
public function result()
{
$this->show_p($this->format() . '</table>');
}
}
//定义一个Textlist类,继承Norm类和Data接口,输出列表格式的数据
class Textlist extends Norm implements Data
{
function format()
{
return array_reduce(
Data::array,
function ($a, $b) {
return $a .= ($b['姓名'] . '年龄' . $b['年龄'] . '岁性别' . $b['性别'] . '</br>');
}
);
}
public function result()
{
$this->show_p($this->format());
}
}
//实例化对象然后输出
$tab = new Tab;
$tlist = new Textlist;
$out = new Output;
$out->out($tab);
$out->out($tlist);