>  기사  >  백엔드 개발  >  TP5 싱글턴 모드 작동 모델

TP5 싱글턴 모드 작동 모델

不言
不言원래의
2018-05-03 11:11:323254검색

이 기사에서는 특정 참조 가치가 있는 TP5 싱글톤 모드 작동 모델을 주로 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구가 참조할 수 있습니다.

1丶데이터베이스 생성 및 데이터베이스 구성

1. 데이터베이스 디자인은 다음과 같습니다. 다음과 같습니다

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `u_id` int(255) NOT NULL AUTO_INCREMENT,
  `u_name` varchar(50) NOT NULL,
  `u_age` int(3) DEFAULT NULL,
  `u_sex` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`u_id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

2.database.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

return [
    // 数据库类型
    &#39;type&#39;            => &#39;mysql&#39;,
    // 服务器地址
    &#39;hostname&#39;        => &#39;127.0.0.1&#39;,
    // 数据库名
    &#39;database&#39;        => &#39;singletons&#39;,
    // 用户名
    &#39;username&#39;        => &#39;root&#39;,
    // 密码
    &#39;password&#39;        => &#39;123456&#39;,
    // 端口
    &#39;hostport&#39;        => &#39;3306&#39;,
    // 连接dsn
    &#39;dsn&#39;             => &#39;&#39;,
    // 数据库连接参数
    &#39;params&#39;          => [],
    // 数据库编码默认采用utf8
    &#39;charset&#39;         => &#39;utf8&#39;,
    // 数据库表前缀
    &#39;prefix&#39;          => &#39;u_&#39;,
    // 数据库调试模式
    &#39;debug&#39;           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    &#39;deploy&#39;          => 0,
    // 数据库读写是否分离 主从式有效
    &#39;rw_separate&#39;     => false,
    // 读写分离后 主服务器数量
    &#39;master_num&#39;      => 1,
    // 指定从服务器序号
    &#39;slave_no&#39;        => &#39;&#39;,
    // 是否严格检查字段是否存在
    &#39;fields_strict&#39;   => true,
    // 数据集返回类型
    &#39;resultset_type&#39;  => &#39;array&#39;,
    // 自动写入时间戳字段
    &#39;auto_timestamp&#39;  => false,
    // 时间字段取出后的默认时间格式
    &#39;datetime_format&#39; => &#39;Y-m-d H:i:s&#39;,
    // 是否需要进行SQL性能分析
    &#39;sql_explain&#39;     => false,
];

2丶MVC 3개의 분리

1.Controller

새 컨트롤러 생성: Users.php

2.Model

새 모델 파일 Users.php

생성 3.View

새 사용자 폴더 생성 및 새 index.html 파일 생성

tp5 싱글톤 모드의 세 가지 코드 구현

1. 싱글톤 모드를 사용하는 이유

싱글톤 모드를 사용하여 논리 처리와 데이터베이스 작업을 분리하면 크게 향상될 수 있습니다. mysql SQL 처리 기능 및 유지 관리가 쉽습니다

2. 컨트롤러는 로직만 처리하고 모델은 데이터베이스 작업만 처리합니다

3. 예를 들어 코드는 다음과 같습니다

HTML:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"> 
	<title>TP5.0单例模式</title>
	<link rel="stylesheet" href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css">  
	<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
	<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<p style="margin-top:20%;">
	<form class="form-horizontal" role="form" method="POST" action="{:url(&#39;users/add&#39;)}">
		<p class="form-group">
			<label for="firstname" class="col-sm-2 control-label">Id</label>
			<p class="col-sm-6">
				<input type="text" class="form-control" name="id" id="id" 
					   placeholder="id">
			</p>
		</p>
		<p class="form-group">
			<label for="lastname" class="col-sm-2 control-label">Name</label>
			<p class="col-sm-6">
				<input type="text" class="form-control" name="name" id="name" 
					   placeholder="Name">
			</p>
		</p>
		<p class="form-group">
			<p class="col-sm-offset-2 col-sm-10">
				<p class="checkbox">
					<label>
						<input type="checkbox"> Remember me
					</label>
				</p>
			</p>
		</p>
		<p class="form-group">
			<p class="col-sm-offset-2 col-sm-10">
				<button type="submit" class="btn btn-default">Go</button>
			</p>
		</p>
	</form>
</p>
</body>
</html>

Routing settings

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
Route::rule(&#39;add&#39;,&#39;users/add&#39;,&#39;GET&#39;); // 添加

Route::rule(&#39;del&#39;,&#39;users/del&#39;,&#39;GET&#39;); // 删除

Route::rule(&#39;update&#39;,&#39;users/update&#39;,&#39;GET&#39;); // 更新

Route::rule(&#39;query&#39;,&#39;users/query&#39;,&#39;GET&#39;);// 查询

Route::rule(&#39;batchupdate&#39;,&#39;users/batchupdate&#39;,&#39;GET&#39;); // 更新多个

Controller

<?php
namespace app\index\controller;
use app\index\model\Users as UsersModel;
use think\Controller;
use think\Db;
class Users extends Controller
{   
    /**
    * 模板渲染
    */
    public function index()
    {
        return view(&#39;index&#39;);
    }
    /**
    * 添加一条数据
    */
    public function add()
    {
        $u_id = intval(input(&#39;id&#39;));
        $u_name = input(&#39;name&#39;);
        $u_age = 18;
        $u_sex = 0;
        $insertOne = UsersModel::insertOne($u_id,$u_name,$u_age,$u_sex);
        if($insertOne)
        {
            $this->success("插入".$u_name."成功");
        }
        else{
            $this->error("插入".$u_name."失败");
        }
    }
    /**
    * 删除一条数据(硬删除)
    */
    public function del()
    {
        $u_id = intval(input(&#39;id&#39;));
        $delOne = UsersModel::deleteOne($u_id);
        if($delOne)
        {
            $this->success("删除".$u_id."成功");
        }
        else{
            $this->error("删除".$u_id."失败");
        }
    }
    /**
    * 更新
    */
    public function update()
    {
        $u_id = intval(input(&#39;id&#39;));
        $u_age = 18;
        $updateOne = UsersModel::updateOne($u_id,$u_age);
        if($updateOne)
        {
            $this->success("更新".$u_id."的年龄为".$u_age."成功");
        }
        else{
            $this->error("更新".$u_id."的年龄为".$u_age."失败");
        }
    }
    /**
    * 查询
    */
    public function query()
    {   
        $filed = "u_id,u_age"; //多个字段以逗号隔开
        $u_id = "";
        $query = UsersModel::query($filed,$u_id);
        dump($query);
    }
    /**
    * 批量修改
    */
    public function batchupdate()
    {
        $array = array(array(&#39;u_id&#39;=>1,&#39;u_name&#39;=>&#39;deng&#39;,&#39;u_age&#39;=>18,&#39;u_sex&#39;=>1),array(&#39;u_id&#39;=>2,&#39;u_name&#39;=>&#39;yuan&#39;,&#39;u_age&#39;=>19,&#39;u_sex&#39;=>2));
        $updateall = UsersModel::batchUpdate($arr);
        if($updateall)
        {
            $this->success("success");
        }
        else{
            $this->error("error");
        }
    }
}

모델 SQL 처리는 정적 수정을 사용합니다.

<?php
namespace app\index\model;

use think\Model;
use think\Db;
/**
 * 使用静态方法 static 而不是 public 在controller里面不用new 直接用 会方便很多
 */
class Users extends Model
{   
    private static $instance;
    protected $defaultField = &#39;danli&#39;;
    private function __clone(){} //禁止被克隆
    /**
    * 单例
    */
    public static function getInstance()
    {
        if(!(self::$instance instanceof self)){
            self::$instance = new static();
        }
        return self::$instance;
    }
    /**
    * 添加一条数据
    */
    public static function insertOne($uid,$uname,$uage,$usex)
    {
        $inserttheone = self::getInstance()->execute("insert into users(u_id,u_name,u_age,u_sex) value(".$uid.",&#39;".$uname."&#39;,".$uage.",".$usex.")");
        if($inserttheone)
        {
            return true;
        }
        else{
            return false;
        }
    }
    /**
    * 删除一条数据
    */
    public static function deleteOne($uid)
    {
        $delone = self::getInstance()->execute("delete from users where u_id = ".$uid."");
        if($delone)
        {
            return true;
        }
        else{
            return false;
        }
    }
    /**
    *  修改一条数据
    */
    public static function updateOne($uid,$age)
    {
        $updateone = self::getInstance()->execute("update users set u_age = ".$age." where u_uid = ".$uid."");
        if($updateone)
        {
            return true;
        }
        else{
            return false;
        }
    }
    /**
    * 查询
    */
    public static function query($defaultField,$uid)
    {   
        if($defaultField == &#39;&#39; || empty($defaultField) || is_null($defaultField)){
            $defaultField = &#39;*&#39;;   
        }
        if($uid == &#39;&#39; || empty($uid) || is_null($uid)){
            $uid = &#39;&#39;;   
        }
        else{
            $uid = "where u_id = $uid";
        }
        return self::getInstance()->query("select $defaultField from users $uid");

    }
    /**
    * 批量修改
    */
    public static function batchUpdate($arr)
    {   
        foreach ($arr as $key => $value) {
            $updatearr = self::getInstance()->execute("update users set u_name = &#39;".$value[&#39;u_name&#39;]."&#39;,u_age = ".$value[&#39;u_age&#39;].",u_sex = ".$value[&#39;u_sex&#39;]." where u_uid = ".$uid."");
            if($updatearr)
            {
                return true;
            }
            else{
                return false;
            }
        }
    }
}

위 4개는 모델의 일부 SQL 처리를 처리하기 위해 싱글톤 모드를 사용하고 있습니다. tp5에서는 컨트롤러 테이블 이름 모델이 일대일에 해당하는 한 직접 사용할 수 있습니다. -하나, 비교적 편리함

관련 추천:

Tp5 프로젝트 수정 데이터베이스

위 내용은 TP5 싱글턴 모드 작동 모델의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.