目录
回复内容:
首页 后端开发 php教程 数据库封装类设计

数据库封装类设计

Jun 06, 2016 pm 08:08 PM
mysql php redis

再看别人一个程序的时候,发现他封装的mysql操作类所有的方法都是static的,,而封装的redis类的方法却又都不是static的,请问下这样设计有什么特殊的意义或者有什么特殊的考虑吗?

回复内容:

再看别人一个程序的时候,发现他封装的mysql操作类所有的方法都是static的,,而封装的redis类的方法却又都不是static的,请问下这样设计有什么特殊的意义或者有什么特殊的考虑吗?

没办法评价,他的选择针对他的代码使用的场景也许是适合的,比如有限的数据库对象,且80%以上的请求都需要操作数据库,这样他可以在进程初始化的时候就启动数据库连接,而较少使用redis,而且又有多个redis对象,这样的话如果总是把所有的redis在初始化的时候构造明显就造成了浪费。所以他做了这种选择。

建议学会思考,也要学会学习。
1- 作者写代码时的思路别人只能猜测,不会全中;
2- 不要认为你写不出来,别人写出来,那人家写的就是绝对正确的、优秀的;
3- 先自己答题,再参考别人的答案,千万不要被别人的思想先入为主;
4- 越大的项目出现烂代码的几率就越高,要去其糟粕,因为不可能一个人完成所有开发,而且就算一个人开发也有巅峰和低谷,设计的思路很好,具体编程时由于各种原因无法达到预期是太平常的事情。

回到问题本身,从我个人的经验(以及很多框架)来看,static方法通常都属于工具方法,如DB::factory, App::getModel, Date::format,而对于数据库操作和redis操作,它们明显不属于工具方法,所以不建议静态化。
而对于mysql类所有方法都是static的,从大方向来说其实是败笔。开发者不太可能在DB::insert方法内部进行数据库连接状态检测,所以必然早就连接了数据库,一方面如果当前进程完全不需要数据库介入,这次连接就浪费了,另一方面,这明显延长了数据库连接时间,即如果是迟绑定,本次数据库连接可能只要持续0.05s,而由于预绑定,实际上本次数据库连接持续了0.1s,且其中的0.05s是空闲的,在等待php进程处理其他逻辑,这两方面都增加了数据库压力。

--补充--
如果真的在DB::insert中包含了数据库连接状态检测,一方面增加了额外的逻辑,另一方面不适合多数据库的项目(如果想兼容多数据库,那么在调用insert的时候还要允许传入数据库连接参数,好麻烦)

个人看法,仅供参考。

首先,static的执行效率高,因为脚本运行时就加载到了内存中,而new的话还需要实例化的过程,接着mysql因为sql语句相比较redis的操作方法要复杂,对于mysql封装的方法可能比较复杂,而redis的操作语句比较简单,作者可能懒得进行复杂的封装。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

php程序在字符串中计数元音 php程序在字符串中计数元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? 在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? Apr 01, 2025 pm 03:06 PM

在Docker环境中使用PECL安装扩展时报错的原因及解决方法在使用Docker环境时,我们常常会遇到一些令人头疼的问�...

PHP连接MySQL后页面空白,die()函数无效是什么原因? PHP连接MySQL后页面空白,die()函数无效是什么原因? Apr 01, 2025 pm 03:03 PM

PHP连接MySQL后页面空白,die()函数失效的原因分析在学习PHP和MySQL数据库连接的过程中,常常会遇到一些让人困惑...

苹果M1芯片Mac上编译安装Redis失败,如何排查PHP7.3编译错误? 苹果M1芯片Mac上编译安装Redis失败,如何排查PHP7.3编译错误? Mar 31, 2025 pm 11:39 PM

在苹果M1芯片Mac上编译安装Redis遇到的问题及解决方法许多用户在使用苹果M1芯片的Mac电脑编译安装Redis时,可能�...

如何将元素添加到PHP中的数组的末端 如何将元素添加到PHP中的数组的末端 Feb 07, 2025 am 11:17 AM

数组是编程中用于处理数据的线性数据结构。有时在处理数组时,我们需要向现有数组中添加新元素。在本文中,我们将讨论几种在PHP中向数组末尾添加元素的方法,并附带代码示例、输出以及每种方法的时间和空间复杂度分析。 以下是向数组添加元素的不同方法: 使用方括号 [] 在PHP中,向数组末尾添加元素的方法是使用方括号[]。此语法仅适用于我们只想添加单个元素的情况。以下是语法: $array[] = value; 示例

如何在前台触发后台异步批量发送短信而不影响用户体验? 如何在前台触发后台异步批量发送短信而不影响用户体验? Mar 31, 2025 pm 11:45 PM

如何实现前台触发后台异步批量发送短信的功能?在某些应用场景中,用户需要通过前台操作触发后台的批量短...

See all articles