search
HomeBackend DevelopmentPHP Tutorial数据库封装类设计

再看别人一个程序的时候,发现他封装的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的操作语句比较简单,作者可能懒得进行复杂的封装。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software