Skip to content

【锦囊妙计】我做PHP开发时踩的坑 ​

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。

这篇文章整理了我在开发过程中遇到的一些问题,比如“如何更好的比较字符串”,“什么场景下应该用什么函数读取文件”。

把开发过程中精益求精实现需求的知识点汇总分享给大家。

比较两个字符串 strcmp ​

== 只能比较两个字符串是否相等

我们可以使用strcmp()比较字符串,不仅能比较是否相当,还能比较大小。

scss
strcmp(str1,str2) 如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

延伸:strcasecmp(),不区分大小写比较。

小技巧:cmp 我理解就是比较compare的简写,这样就不会记错啦。

地址符& 类比go语言的传值还是传引用 ​

PHP类的调用不需要传地址符&,会自动调用类里面的内容

PHP标记语言用什么符号? ​

不止用,还可以用、<% %>标记PHP语言。

mysql_pconnect() 和 mysql_connect()区别 ​

两者看起来非常相似,前者虽然只多了一个P, 但有两个主要区别:

mysql_pconnect与数据库建立持久链接,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。其次,当脚本执行完毕后,SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用。

注意:mysql_close() 不会关闭由 mysql_pconnect() 建立的连接

静态static ​

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

PDO对象中的成员方法: ​

我使用yaf框架开发的时候自定义了baseModel,对PDO的成员方法进行了封装。

当使用Laravel之后,就不需要关心PDO的成员方法了,只需要关心Eloquent怎么用。

getAttribute() 获取一个数据库连接对象的属性

setAttribute() 为一个数据库连接对象设定属性

errorCode() 获取错误码

errorInfo() 获取错误信息

exec() 处理一条SQL语句,并返回所影响的条数

query() 处理一条SQL语句,并返回一个PDOStatement对象

quote() 为某个sql中的字符串添加引号

lastInsertId() 获取插入到表中的最后一条数据的主键

prepare() 负责准备执行的sql语句

getAvailableDriver() 获取有效的PDO驱动器名称

beginTransaction() 开始一个事务

commit() 提交事务

rollback() 回滚事务

读取文件 ​

  1. fread() 最大一次性能读取 8k长度的字节数,所以不能一次性读取大文件去作下载。 优势在于,操作更加灵活,每次读取指定字节的内容,用于下载时方便控制服务器的流量。

  2. readfile() 优势是能够一次性读取大文件;不需要PHP预读到内存,下载速度更快,直接把文件的处理交由服务器。缺点就是不能控制负载。所以它是没有内存限制的,如果遇到报内存错误,先调用 ob_end_flush()之类的函数关闭缓冲区。

  3. file_get_contents 也是没 readfile()快, 因为也是走了php的内存。但是在读取小文本内容到字符串变量时,这个函数最适合使用,简单,更快。

  4. file() 和file_get_contents()差不多

最后 ​

欢迎大家订阅我下方的专栏

AI 应用开发训练营 · 现在开始

别只收藏 AI 文章,今天就做出第一个能上线的项目

文章解决认知,项目才证明能力。把 Agent、RAG、MCP 变成可运行、可展示、可面试表达的成果,现在就从一次岗位准备度自测开始。

立即开始 AI 岗位准备度自测 查看训练营路线
真实学员成果先看成果,再决定是否开始 →
  1. 01选方向
  2. 02做项目
  3. 03出成果
  4. 04拿面试