博主信息
博文 22
粉丝 0
评论 0
访问量 22617
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
【9/7】--- 单例模式的实现以及mvc三层的实现以及原理
花弄的博客
原创
1045人浏览过

实例

<?php
/**
 * 单例,一个类只允许实例化一次
 */

/**
 * 创建一个单例类
 */
class Config{
	
	//设置类实例保存属性\
	private static $intance =null;

	//参数容器
	public $setting =[];

	//禁止从外部实例化对象
	private function __construct()
	{
	}

	//克隆私有化
	private function __clone()
	{
	}

	//仅允许外部通过公共静态方法访问
	public static function getVisit()
	{
		//检测当前类类属性是否以保存类实例
		if(self::$intance==null)
		{
			self::$intance =new self();
		}
		return self::$intance;
	}

	//设置器
	//获取参数
	public function get($name = '')
	{
		// 如果没有参数,默认获取所有参数
		if(empty($name))
		{
			return $this->setting;
		}
		//返回传入的参数
		return $this->setting[$name];
	}

	//设置参数
	public function set()
	{
		//获取参数数量
		$num = func_num_args();
		if($num >0)
		{
			switch ($num) {
				case 1:
					$value = func_num_args(0);
					if(is_array($value))
					{
						$this->setting = array_merge($this->setting,$value);
					}
					break;
				case 2:
					$name = func_get_arg(0);		//配置项名称
					$value = func_get_arg(1);		//配置项的值
					$this->setting[$name] = $value;
					break;
				default:
					echo '<span sytle="color:red">非法参数</span>';
					break;
			}
		}else
		{
			echo '<span sytle="color:red">没有参数</span>';	
		}
	}
}


$obj1 = Config::getVisit();
$obj2 = Config::getVisit();
var_dump($obj1);
var_dump($obj2);

echo '<hr>';
//设置属性
$obj1 ->set('host','127.0.0.1');
echo $obj1->get('host');
echo '<hr>';
$obj1->set(['host'=>'127.0.0.1','user'=>'root','psw'=>'root']);
print_r($obj1->get());

运行实例 »

点击 "运行实例" 按钮查看在线实例

单例模式针对程序做了统一的限制,只允许实例化一个类.在多用于限制用户的多开以及加大用户账户的安全性.微信PC***端就是单例的很好的体现,本机上只允许打开一个***端.

dl.jpg


实例

<?php
namespace mvc\view{

	class View{
		public $data =[];
		//模板初始化赋值
		public function __construct($data)
		{
			$this->data = $data;
		}

		//获取数据
		public function getData()
		{
			return $this->data;
		}

		//渲染模板
		public function display($data){
        $table = '<!doctype html>
	<html lang="en">
	<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">
    <style>
        table,th,td {
            border: 1px solid black;
        }
        table {
            border-collapse: collapse;  /*折叠表格线*/
            width: 600px;
            margin: 30px auto;
            text-align: center;
            padding: 5px;
        }

        table tr:first-child {
            background-color: lightgreen;
        }
        table caption {
            font-size: 1.5em;
            margin-bottom: 15px;
        }
    </style>
    <title>MVC简介</title>
	</head>
	<body>
    <table>
        <caption>用户信息表</caption>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>性别</th>
            <th>电话</th>
        </tr>';

        foreach ($data as $staff) 
        {
            $table .= '<tr>';
            $table .= '<td>'.$staff['id'].'</td>';
            $table .= '<td>'.$staff['username'].'</td>';
            $table .= '<td>'.$staff['sex'].'</td>';
            $table .= '<td>'.$staff['phone'].'</td>';
            $table .= '</tr>';
        
        }
    
        $table .= '</table></body></html>';
        echo $table;

    }
	}		
}

三层的视图层,对外***端显示的内容:

实例

<?php	
namespace mvc\model{

	class Model{
		public $pdo	= null;
		//连接数据库
		public $result = [];
		public function __construct($dbname,$user,$psw)
		{
			$this->pdo = new \PDO('mysql:host=127.0.0.1;dbname='.$dbname, $user, $psw);
		}

		//查询
		public function select($tb_name,$num)
		{
			//预处理对象
			$stmt = $this ->pdo->prepare("select id,username,sex,phone from {$tb_name} limit {$num}");
			//执行查询操作
			$stmt->execute();
			$this->result = $stmt->fetchALL(\PDO::FETCH_ASSOC);
		}
	}
}

三层的数据模型层,负责将对视图层传过来的数据和业务逻辑层做出的数据交互进行处理验证


实例

<?php	
namespace mvc\control{
	use mvc\view\View;
	use mvc\model\Model;
	class Control{
		//整合程序入口
		public function index()
		{
			require './model/Model.php';
			//实例初始化,连接数据库
			$model = new Model('pdotest','root','root');
			$model ->select('user',10);
			$result = $model->result;

			require './view/View.php';
			$view = new View($result);
			$data = $view->getData();
			$view->display($data);
		}
	}
}

业务逻辑层,整合视图层与数据模型层之间的数据请求交互,进行业务逻辑的处理

实例

<?php
//首页
require './control/Control.php';
use mvc\control\Control;
$control = new Control;
$control->index();

整程序的入口;

mvc.jpg

mvc 就是把视图,数据,业务逻辑分开进行管理的一种设计模式,各做各的事,可以让代码不会显得那么臃肿,对于功能的改变需求,也不会导致牵一发而动全身,就算要动,也能很方便快速的找到相应的模块,不会导致找瞎眼的情况出现.

批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学