单例模式
实例
<?php /** * 单例模式:一个类仅允许被实例化一次 * 1.一个站点仅需要创建一个数据库连接 * 2.一个站点只需要一个配置类 */ //创建一个使用的配置类 class config { /** *为什么要用静态?因为静态属性属于类的,可以被所有类实例所共享 * 为什么要能实例初始化为null,便于检测是否已经实例化 */ private static $instance = null; public $setting = []; //禁止从类的外部实例化外部 private function __construct() { } //防止克隆 private function __clone() { // TODO: Implement __clone() method. } public static function getInstance() { if(self::$instance ==null) { self::$instance = new self(); } //如果存在,直接返回 return self::$instance; } //配置项的设置操作 public function set() { //获取参数数量 if(func_num_args()>0) { if((func_num_args() ==1) && is_array(func_get_args())){ //数组 $value =func_get_arg(0); $this->setting=array_merge($this->setting=$value); }elseif(func_num_args() ==2){ $name = func_get_arg(0); $value = func_get_arg(1); $this->setting[$name] = $value; }else{ echo '非法参数'; } }else{ echo '没有参数传入'; } } //获取参数:当无参数时,默认获取全部 public function get($name='') { if(empty($name)){ return $this->setting; } return $this->setting[$name]; } } $obj = config::getInstance(); //var_dump($obj); $obj->set('host','127.0.0.1'); echo $obj->get('host'),"<hr>"; $obj->set(['host'=>'127.0.0.1','user'=>'root','password'=>'root']); print_r($obj->get());
运行实例 »
点击 "运行实例" 按钮查看在线实例
2.MVC的实现原理
实例
<?php /** * 模型层 */ namespace mvc\model; class Model { public $pdo = null; //连接数据库 public $result =[]; public function __construct($db,$user,$password) { $this->pdo = new \PDO('mysql:host=127.0.0.1;dbname='.$db,$user,$password); } //查询 public function select($table,$num){ //创建预处理对象 $stmt = $this->pdo->prepare("SELECT * FROM {$table} LIMIT :num"); //查询 $stmt->bindValue(":num",$num,\PDO::PARAM_INT); $stmt->execute(); $this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC); } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?php /** * 视图类 */ namespace mvc\view; class View { public $data = []; //模板赋值 public function __construct($data) { $this->data = $data; } //获取数据 public function getData() { return $this->data; } //渲染模板 public function dispaly($data) { $table = '<!doctype html> <html lang="zh-Hans"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>MVC简介</title> <style> table,th,td{ border:1px solid black; } table { border-collapse:collapse; width:60%; margin:30px auto; text-align:center; } table tr:first-child{ background: lime; } table caption{ font-size:1.5em; margin-bottom:15px; } </style> </head> <body> <table > <caption>员工信息表</caption> <tr> <td>ID</td> <td>姓名</td> <td>年龄</td> <td>工资</td> </tr>'; foreach ($data as $value) { $table .= '<tr>'; $table .= '<td>' . $value['id'] . ' </td>'; $table .= '<td>' . $value['name'] . ' </td>'; $table .= '<td>' . $value['age'] . ' </td>'; $table .= '<td>' . $value['salary'] . ' </td>'; $table .= '</tr>'; } $table .= '</table></body></html>'; echo $table; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?php /** * 控制器 */ namespace mvc\controller; use mvc\model\Model; use mvc\view\View; class Controller { public function index(){ require './model/Model.php'; $model = new Model('php','root','root'); $model->select('staff',12); $result = $model->result; require './view/View.php'; $view = new View($result); $data = $view->getData(); $view->dispaly($data); } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?php /** * 入口文件 */ require './controller/Controller.php'; use mvc\controller\Controller; $controller = new Controller; $controller->index();
运行实例 »
点击 "运行实例" 按钮查看在线实例
3.MVC的设计思想是什么?
mvc主要应该是把视图,模型分开进行处理,这有助于团队协作,
也为了代码复用. 控制器统一分发请求与动作.交给模型进行逻辑处理,最后传到视图进行显示出来