PHP开发优化技巧:避免使用相对路径,提升代码效率与可维护性
在本文中,我们将介绍一些有用的 PHP 开发提示和技巧,您可以使用它们来改进和优化 PHP 代码。

1.不要使用相对路径
你会经常看到:
这种方法有很多缺点:它首先查找指定的php包含路径,然后查找当前目录,因此检查的路径太多。如果该脚本被另一个目录中的脚本包含,则其基目录将成为另一个脚本所在的目录。
还有一个问题是,计划任务运行脚本时,其父目录可能不是工作目录。所以最好的选择是使用绝对路径:
我们定义了一个绝对路径,并且该值是硬编码的。我们还可以改进一下,路径/var/www/project也可能会变,那么我们每次都要改吗?不,我们可以使用 __FILE__ 常量,例如:
现在,无论您移动到哪个目录,例如移动到外部服务器,代码都将正确运行,无需任何更改。
2.不要使用require,直接include
可以在脚本的头部引入多个文件,例如类库、工具文件和帮助函数,例如:
这种用法比较原始,应该更灵活一些。应该编写一个辅助函数包含文件。例如:
有什么区别吗?代码更具可读性,将来您可以根据需要扩展功能,例如:
您可以执行更多操作:查找同一文件的多个目录。类文件放置的目录可以很方便的更改,无需一一修改代码。类似的函数可以用来加载html内容等文件。
3. 不断调试应用程序的代码
在开发环境中,我们打印数据库查询,转储有问题的变量值,一旦问题解决,我们就注释或删除它们。然而,更好的方法是保留调试代码。在开发环境中,您可以:
在服务器中您可以:
4.使用跨平台函数执行命令
system、exec、passthru 和 shell_exec 四个函数可用于执行系统命令。每个的行为略有不同,问题是在共享主机上时,某些功能可能会被选择性地禁用。大多数新手每次使用之前都会先检查哪个功能可用。更好的解决方案是将函数封装成跨平台函数。
只要系统函数可用,上面的函数就会运行shell命令,这保持了代码的一致性。
5、灵活编写函数
使用上面的函数添加单个项目。当向列表添加项目时,您是否创建另一个函数?不会的,只要稍微注意一下不同类型的参数,就会更加灵活,比如:
现在,同一个函数可以处理不同类型的输入参数。您可以参考上面的示例来重构代码的许多部分,使其更加智能。
6. 故意忽略 php 结束标记
我很想知道为什么这么多关于 PHP 建议的博客文章都没有提到这一点。
这会节省你很多时间,让我们举个例子:
//一个super_class.php文件
//结束标记后的超级额外字符
这样,您将收到 headers already send 错误。为什么?因为“超级额外字符”已经输出了。现在您必须开始调试。这要花很多时间才能找到超级额外的位置。因此,养成省略结束符的习惯:
这样会更好。
7. 将所有输入收集到某处并立即输出到浏览器
这称为输出缓冲。假设您有不同函数的输出:
或者,在某处集中收集输出。您可以将其存储在函数的局部变量中,或使用 ob_start 和 ob_end_clean。如下:
为什么需要输出缓冲:
>>您可以在将输出发送到浏览器之前更改输出,例如 str_replaces 函数或 preg_replaces 或添加一些监视/调试 html 内容。
>>在输出到浏览器的同时进行PHP处理是非常糟糕的。您可能已经看到某些网站的侧边栏或中间出现错误消息。你知道为什么会发生这种情况吗?因为处理和输出是混合的。
8.发送正确的mime类型头信息
输出一些xml。
效果很好,但需要一些改进。
注意标题行。这行告诉浏览器发送的内容是xml类型,这样浏览器就可以正确处理。许多 JavaScript 库也依赖标头信息。
类似的还有javascript、css、jpg图片、png图片:
9.为mysql连接设置正确的字符编码
我曾经遇到过,在mysql表中设置了unicode/utf-8编码,phpadmin可以正确显示。但是当你获取到内容并输出到页面上时,就会出现乱码。这里的问题在于MySQL连接的字符编码。
一旦连接到数据库,最好设置连接的字符集。如果您的应用程序要支持多种语言,这是必要的。
10.使用htmlentities设置正确的编码选项
php5.4之前,字符默认编码为ISO-8859-1,无法直接输出如Àâ等。
php5.4之后默认编码是UTF-8,这样会解决很多问题。但如果您的应用程序是多语言的,您仍然需要注意编码问题。
11. 不要使用 gzip 来压缩应用程序中的输出
您考虑过使用 ob_gzhandler 吗?不要这样做,这是没有意义的。 PHP 应该只用于编写应用程序,您不应该担心优化服务器和浏览器之间的数据传输。
使用apache的mod_gzip/mod_deflate模块来压缩内容。
12.使用json_encode输出动态
PHP经常被用来输出动态的javascript内容:
13、写入文件前,检查目录写入权限
在写入或保存文件之前,请确保该目录可写。如果不可写,就会输出错误信息,这会节省你大量的调试时间。在Linux系统中,需要对权限进行处理。不正确的目录权限会导致很多问题,文件可能无法读取等。
确保您的应用程序足够智能,可以输出一些重要信息。
这通常是正确的,但存在一些间接性,file_put_contents 可能会因以下几个原因而失败:
>>父目录不存在
>>目录存在但不可写
>> 文件被写锁定?
因此最好在写入文件之前进行显式检查。
通过这样做,您将获得有关文件写入位置以及失败原因的清晰消息。
14.更改应用程序创建的文件的权限
在 Linux 环境中,权限问题可能会浪费您大量的时间。从现在开始,每当您创建一些文件时,请确保使用 chmod 设置正确的权限。否则,也许该文件首先是由“php”用户创建的,但如果使用其他用户登录工作,系统会拒绝访问或打开该文件,而你将不得不努力获取root权限,更改文件权限等
15. 不要依赖提交按钮的值
新媒体排版是一款在线图文编辑工具,可以为您节省大量排版时间,让您的工作更加轻松高效。
上面大部分都是正确的,除了应用程序是多语言的,“保存”可能意味着其他东西,你如何区分它们。因此,不要依赖提交按钮的值。
现在您已经摆脱了提交按钮值的束缚。
16、具有相同值的变量定义为静态变量
替换为静态变量:
17.不要直接使用$_SESSION变量
一些简单的例子:
这可能会导致某些问题。如果多个应用程序在同一个域名上运行,会话变量可能会发生冲突。两个不同的应用程序可以使用相同的会话密钥。例如,前端门户和后端管理系统使用相同的域名。从现在开始,使用应用程序特定的键和包装函数:
18、将工具功能封装成类
如果您在一个文件中定义了许多实用函数:
这些函数的使用分散在整个应用程序中。您可能想将它们封装到一个类中:
明显的好处是,如果 PHP 有一个同名的内置函数,就可以避免冲突。
另一种看待它的方式是,您可以在同一个应用程序中维护同一类的多个版本,而不会引起冲突,这是封装的基本好处。
19. 一堆愚蠢的技巧
>>使用echo代替print
>>使用 str_replace 而不是 preg_replace 除非你绝对需要
>>不要使用短标签
>>将简单字符串的双引号替换为单引号
>> 记住在头部重定向后使用 exit
>>不要在循环中调用函数
>>isset 比 strlen 快
>> 一致的格式化代码
>> 不要删除循环或 if-else 中的括号
不要写这样的代码:
这绝对是浪费。写为:
不要试图通过省略某些语法来缩短代码,但要保持逻辑简短。
>>使用具有语法突出显示功能的文本编辑器。语法突出显示可以帮助您减少错误。
20.使用array_map快速处理数组
例如,假设您要修剪数组中的所有元素。新手可能会:
但使用 array_map 更容易:
这将为 $arr 数组的每个元素应用修剪。另一个类似的函数是array_walk。查看文档以获取更多提示。