批改状态:合格
老师批语:作业总结的很好, 表格让人耳目一新,眼前一亮
MVC框架:Model > View > Container(对象容器) > Facade(门面) > Controller
1、Model代码:
<?phpnamespace one;use mysqli;class Model{public function getdatas(){$mysql=new mysqli('NewYear.com','phptest','123456','php');$stmt=$mysql->stmt_init();$stmt->prepare('SELECT * FROM `staffs`');// var_dump($stmt);$stmt->execute();$reuslt=$stmt->get_result();$datas=$reuslt->fetch_all(MYSQLI_ASSOC);return $datas;}}
2、View代码:
<?phpnamespace one;// 视图类class View{public function fetch($data){$table = '<table>';$table .= '<caption>员工信息表</caption>';$table .= '<tr><th>ID</th><th>姓名</th><th>性别</th><th>职务</th><th>手机号</th><th>入职时间</th></tr>';// 将数据循环遍历出来foreach ($data as $staff) {$table .= '<tr>';$table .= '<td>' . $staff['id'] . '</td>';$table .= '<td>' . $staff['name'] . '</td>';$table .= '<td>' . ($staff['sex'] ? '男' : '女') . '</td>';$table .= '<td>' . $staff['position'] . '</td>';$table .= '<td>' . $staff['mobile'] . '</td>';$table .= '<td>' . date('Y年m月d日', $staff['hiredate']) . '</td>';$table .= '</tr>';}$table .= '</table>';return $table;}}echo '<style>table {border-collapse: collapse; border: 2px solid;text-align: center;height: 150px;width: 600px;background-color:yellow; }caption {font-size: 1.2rem; margin-bottom: 10px;}tr:first-of-type { background-color:red;}td,th {border: 1px solid; padding:5px}</style>';// require 'Model.php';// $mysql=new Model;// $datas=$mysql->getdate();// echo (new View())->fetch($datas);
3、Control代码:
<?phpnamespace one;// 加载数据和视图require 'Model.php';require 'View.php';class Objects{protected $obj=[];public function bind($classname,\Closure $class){$this->obj[$classname]=$class;}public function make($classname,$params=[]){return call_user_func_array($this->obj[$classname],[]);}}$obj=new Objects;$obj->bind('model',function(){return new Model();});$obj->bind('view',function(){return new View();});class Face{protected static $class=null;protected static $datas=[];public static function set(Objects $obj){static::$class=$obj;}public static function get_datas(){static::$datas=static::$class->make('model')->getdatas();}public static function fetch(){return static::$class->make('view')->fetch(static::$datas);}}class Controler{public function __construct(Objects $class){Face::set($class);}public function index(){Face::get_datas();return Face::fetch();}}$c=new Controler($obj);echo $c->index();
4、效果图:
代码:
<?phpnamespace part10;// 将所有查询参数全部使用pathinfo方式提供// 实例演示class ActionController1{public function method($id, $name,$age){return "id => $id : name => $name : age => $age";}}// 1. 解析出pathinfo// echo $_SERVER['PATH_INFO'].'<br>';$url=ltrim($_SERVER['PATH_INFO'],'/');$pathinfo = explode('/',$url);$pathinfo = array_values($pathinfo);echo '<pre>' . print_r($pathinfo, true) . '</pre>';// 解析出控制器$controller = __NAMESPACE__ . '\\' . ucfirst($pathinfo[0]) . 'Controller1';// echo $controller;// 解析控制器方法$action = $pathinfo[1];// 解析参数// array_slice(): 从一个数组中返回指定索引开始的指定长度的元素$values = array_slice($pathinfo, 2);$params = [];for ($i=0; $i<count($values); $i+=2) {if (isset($values[$i+1])) $params[$values[$i]] = $values[$i+1];}echo '<pre>' . print_r($params, true) . '</pre>';// 实例化控制器$test = new $controller();// 以回调的方式来调用控制器的方法echo call_user_func_array([$test, 'method'], $params);
结果图:
1、知识点:
(1)http请求:
$_SERVER[‘REQUEST_URI’]:域名下的文件地址
$_SERVER[‘SCRIPT_FILENAME’]:服务器上的据对路径
$_SERVER[‘SCRIPT_NAME’]:域名下的绝对路径
$_SERVER[‘PATH_INFO’]:跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息(并非所有的url都有这个值)
$_SERVER[‘QUERY_STRING’]:查询的字符串
parse_str(‘id=10&name=ldy’,$params):将查询的字符串转换成数组;
http_build_query():将一个关联数组解析成一个查询字符串(自动转义);
explode(‘/‘,$url):将$url以 / 为界拆分成数组;
array_filter():过滤函数
array_values($array):将数组中的值取出重新组成一个数组;
ucfirst($str):将字符串的首字母大写
call_user_func_array():利用回调函数处理数组
array_slice($array,2,3):从一个数组返回指定索引开始的指定长度的元素。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号