vlambda博客
学习文章列表

2020年将遵循的PHP最佳实践

蜗牛帝 蜗牛帝 今天


与客户端脚本语言相比,Web开发趋势似乎更趋向于服务器端脚本语言。而且可能很难决定从哪里开始和选择什么。


今年,Web技术调查门户网站W3techs.com发布了用于Web开发的五种最受欢迎的服务器端编程语言列表。


这是清单:


PHP

Java

ASP.net

Python

Ruby


大多数网站都建立在PHP上(约78.9%),但其中一些网站是在ASP.net(10.6%),Java(3.7%),Python(1.3%),Ruby(3%)或仅在JavaScript(0.8%,但是它们没有数据库)。


显然,PHP占多数。因此,让我们进一步了解它。


PHP是使用内置的Web开发功能开发的。PHP 7.4中包含的新语言功能使程序员可以更轻松地显着提高其Web应用程序的速度,而无需部署其他资源。


不幸的是,不再正式支持PHP 5.6、7.0和7.1版本。但是大约有64%的WordPress网站仍在那些过时的版本上运行。


好消息?程序员可以切换到这种广泛使用的服务器端脚本语言的最新版本,以提高其网站的加载速度,而无需花费过多的时间和精力。


我如何进行现代PHP开发


刚开始学习PHP时,我使用的是Joomla。然后,我转向使用PHP版本4的开放源代码框架。我对开放源代码框架Symfony尤其感兴趣,该框架大大改善了PHP生态系统。特别是在从事具有挑战性的e-CMS项目(PIMCore版本5.8.6)时,我也对PHP 7.1版特别感兴趣。


最重要的是,这是一个非常艰巨的任务,因为核心管理团队对开源项目中的任务期望很高。那时,PHP 7.1是最新版本,比版本5更高效,并且可以提供比旧版本快4倍的强大性能。


搜索引擎会奖励基于PIMCore 5.8.6版和PHP 7.1版的更快的网站。我已经用过了,所以Syncrasy Tech PIM解决方案提供商的网站将在搜索中排名更高!


让我们深入探讨PHP最佳实践以及升级到最新PHP版本7.4的优势。


2020年将遵循的PHP最佳实践


1.始终使用PSR- 12建议进行无错误编码


我一直使用PSR-12(PHP标准建议书)代替WordPress编码标准。它是PHP框架Symfony和Laravel也使用的最重要的标准之一。它涵盖了从括号到控制结构,方法,缩进,行长以及编码规则的所有内容,这些规则涉及程序员在不同代码结构之间可以留出多少空白。

这主要是因为WordPress标准已过时,并且不支持任何较新的语言功能。使用现代PHP PSR-2功能也是一个好习惯。


2.使用Twig模板使代码简洁易读


Twig是PHP模板引擎的最佳示例。Symfony使用它。在Twig中,代码更加简洁易读,并且支持使用继承和块进行输出转义和模板扩展。Twig在性能方面也很出色,因为它可以编译为PHP模板并且没有开销。它仅限于模板。它使您可以从模板中删除业务逻辑并强制分离关注点。


对于开发人员来说,这真的很容易学习,因为Twig没有很多功能,并且基本代码是HTML。因此,如果您了解HTML,则只需要一些其他功能,并且很高兴使用Twig模板。


Twig具有巧妙的模板组装机制。它将模板编译成简单的PHP类,并将结果存储在缓存文件中。因此,Twig不会两次分析模板。


Twig非常灵活,可以根据您的选择轻松扩展。它允许你编辑标签,使用括号而不是花括号,重新定义类,添加一个新的过滤器,函数或测试等


下面是树枝模板编码的例子

foreach ( $options as $option ) {

   ?>

   <tr class="form-field">

       <th scope="row">

           <label for="<?php echo esc_attr( $option->option_name ); ?>">

               <?php echo esc_html( strtolower( $option->option_name ) ); ?>

           </label>

       </th>

   </tr>

   <?php

} // End foreach ‌ ‌{% for option in options %}

   <tr class="form-field">

       <th scope="row">

           <label for="{{ option.option_name }}">

               {{ option.option_name }}

           </label>

       </th>

   </tr>

{% endfor %}


3.作曲家充当依赖管理器


作曲家是使您可以在正在使用的项目中声明库的工具。它是PHP的依赖项管理器,可自动执行下载,安装和更新。您需要为每个库包括Composer的自动加载文件vendor / autoload.php。


使用依赖管理以避免应用程序级别的冲突很重要。WordPress插件和主题不使用第三方库,因为广泛的API可以满足几乎所有需求。


让我们这样考虑:假设两个插件需要相同的PHP库,但是它们使用的版本不同。


首先运行的插件获得正确的版本,但是第二个插件也获得相同的版本。这可能会在应用程序级别上产生冲突。使用第三方库时,Composer是唯一不会产生冲突的解决方案。


4.使用“命名空间”避免名称冲突


WordPress使用全局名称空间。这意味着全局声明的任何类或函数在整个代码库中的任何位置都是可见的。命名冲突会导致错误,我们不希望这样。

例如,当您声明一个名称已经存在的函数时,就会发生命名冲突。因此,除了使用简单的类名称(例如Order)之外,我还可以这样:


Syncrasy_Get_My_Plugin_Order


其中“ Syncrasy”是我刚刚制作的唯一前缀。


命名空间有助于组织代码并避免名称冲突。您还可以使用复杂的名称空间,例如,使用斜杠分隔的名称空间。


我的例子

class Syncrasy_Get_My_Plugin_Order


如果使用名称空间完成,则将为Syncrasy \ _Plugin \ Order。这里syncrasy和Get_My_Plugin是子命名空间,而Order是类名。您可以添加一个use语句,之后仅使用类名。


查看外观:

use Syncrasy\Get_My_Plugin\Order;


$a = new Order;


5.始终在PHP中使用自动加载器功能


在我的开发项目中,大多数PHP工作流都是通过使用require或include语句形成的。但是我需要在主插件文件中添加更多require语句。


自动加载器是一项自动包含文件的功能,仅在需要时才包含文件。主要优点是不再需要手动添加任何require语句。


使用自动加载器功能,您可以知道类和函数位于哪个文件中。为此,您可以使用PHP-FIG和PSR-4自动加载器工具。


一个示例类

Syncrasy\GetMyPlugin\Models\Order

需要以下文件夹结构:


/get-my-plugin

   get-my-plugin.php

   /includes

       /Models

           Order.php


6.使用箭头功能获得更好和更清洁的单线功能


即使执行简单的操作,PHP中的函数也很冗长。这是由于大量的语法模板,并且您需要手动导入使用的变量。这使得使用简单闭包的PHP代码难以理解甚至难以理解。


如果使用箭头函数语法,则可以具有各种函数,例如variadics,默认值,参数和返回类型,以及按引用传递和返回。同时保持清晰易读的代码。


以下是PHP 7.4中的Arrow函数语法的示例:


array_map(function (User $user) {

   return $user->id;

}, $users)

PHP 7.4 allow you write this code in this way:


array_map(fn (User $user) => $user->id, $users)


7.外部函数接口:一种调用本地函数的简单方法


PHP 7.4最好的和最期待的功能之一是对FFI(外部功能接口)的支持。

PHP 7.4 FFI附带了用于OpenSSL流的TLS 1.3(传输层安全性),预加载功能,PHP FPM系统(快速过程管理器),用于更好地优化代码等。


TLS 1.3的新增功能?


与先前版本的TLS相比,传输层安全性(TLS)1.3协议提供了更好的隐私和性能标准。


TLS 1.3使用OpenSSL流减少延迟,优化代码性能和加密连接的安全性。Cloudflare TLS 1.3在所有现代浏览器中的迅速采用,例如Microsoft Edge开始支持TLS 1.3和76版本,并且TLS 1.3的草稿版本已在Firefox 52中启用,从而可以构建更安全,更快速的Web并影响Web开发标准。在PHP FPM

什么 在编码任务中使用PHP-FPM的主要好处是对PHP脚本的处理效率更高,并且对PHP脚本可以使用“操作码缓存”。PHP-FPM建立在事件驱动的框架上,该框架使PHP脚本可以使用服务器的大量资源,而无需使用在Web服务器进程内部运行它们所产生的额外开销。







PHP-FPM可以重复使用工作进程,而不必为每个PHP请求创建和终止它们。与传统的PHP处理程序相比,PHP-FPM可以提供更多的流量,同时可以提高资源效率。


让我们继续FFI最佳实践


如果继续使用PHP FFI,那么您无需编写新的PHP模块即可与C库/程序进行接口。现在可以使用外部功能界面完成此操作。


如果您需要运行资源密集的代码,则可以使用外部函数接口来执行任务-广泛的解析,数字运算,复杂的渲染等。您可以在一个程序内将两个代码库“粘合”在一起,而无需使用两个完全不同的代码程式。程序员可以拥有一个很好的C-ABI库,该库可随FFI扩展轻松获得。这将节省您的时间,因为您不需要用PHP重写代码。


FFI还可以提高您的编码任务的性能。由于FFI,Python已成为最流行的机器学习语言之一,因为它使Python代码的加载相对简单,并允许使用FFI扩展在Python中使用功能强大的C-ABI库。


8.在PHP 7.4中预加载(我的最爱之一)


让我们谈谈预加载。在PHP中使用库或框架时,代码文件需要正确链接,并且需要在每次请求时加载它们。


借助预加载之类的功能,程序员可以将框架和库加载到OPCache中,从而允许服务器加载PHP文件并将其存储在内存中。这就是使您的代码高效快速地执行的全部内容!


预加载由特定的php.ini指令或opache.preload运行。它具有脚本编译器,该脚本编译器在服务器开始工作时执行。它也可以用来预加载更多文件或编译它们。


php.ini function


该功能很棒,因为预加载的文件始终永远保留在OPCache内存中。


为什么要升级到PHP 7.4?


根据WordPress.org统计,有36.4%的WordPress网站仍在PHP 5.6上。让它沉入其中。


这意味着继续使用PHP 5.6的网站可能会遇到漏洞。在许多情况下,开发人员必须升级这些网站。


我知道这对于使用较旧的插件和主题的开发人员而言可能是一项耗时的任务。更新到最新版本的PHP涉及到更新代码以及大量测试,以确保兼容性。毕竟,您不想破坏用户的网站。


这意味着,如果您希望您的网站在最新版本的PHP上运行,则需要主动进行升级并自行升级,或者从您的网站开发人员或托管提供商那里找人来做。

升级到PHP 7.4具有速度,性能和安全性的优点。如上所述,它具有许多新功能。现在让我们更深入地研究其中的一些。


FFI(外部功能接口)


这是一个全新的扩展,它开拓了新的开发方式。例如,它可以与机器学习和类似技术一起使用。请记住-它仍处于实验阶段。


预加载


预加载也非常有用,因为它允许将PHP类或函数直接加载到内存中。


例如,当我尝试使用PHP运行程序时,它使我的工作更快。它比通常的自动加载方法要好。


对于Web开发人员来说,这是一项极其重要的功能,因为它具有长期使用潜力,在某些情况下可以代替自动加载。


总的来说,使用FFI扩展来编译PHP代码是另一回事。它也为Web以外的PHP开发人员打开了一个全新的世界。


速度与性能


如果您的站点在旧版本的PHP上运行,则更新到最新版本的PHP将立即为您带来性能提升。


所有函数和大多数类都将被永久加载到PHP的函数中,并在以后的任何请求中永久可用,从而提高代码性能。


PHP 7.4帮助解决类依赖性以及与父项,接口和特征的链接。这是旧版本的PHP或Opcode缓存不会发生的事情。

PHP删除了不必要的代码并执行了其他优化。

通过将整个应用程序的代码(包括其框架(例如Symfony和Laravel))预加载到内存中,大多数应用程序的性能将显着提高。


支持与兼容性


使用旧软件的成本高昂,并且在向产品中添加新功能和性能增强功能方面可能会存在风险,并且支持旧版本的PHP会使它们退缩。


PHP一直以其易于编码而闻名,这就是为什么它成为许多新的Web开发人员流行的语言的原因之一。为了解决这个问题,PHP 7.4的许多方面都试图引导新的开发人员朝正确的方向发展。它通过删除以前出于向后兼容性原因保留的写得不好,过时的函数来实现此目的。


随着PHP 7.4的采用,您应该开始看到更高标准的PHP编码。反过来,这也应该有助于PHP成为一种受人尊敬的开发语言,吸引那些本来可以避免使用它的人才。


安全


您应该升级到PHP 7.1或更高版本的另一个基本原因是WordPress网站的安全性。运行最新版本的PHP可以确保您的站点免受诸如代码执行,SQL注入,跨站点脚本或XSS之类的漏洞以及许多其他类型的漏洞的攻击。


代码注入漏洞发生在可以以触发服务器端代码执行的方式来操纵Web应用程序提供的内容的地方。在某些允许用户修改服务器端文件的不良Web应用程序中,有时可以使用应用程序本身的脚本语言来注入代码。


跨站点脚本(XSS)是一种客户端代码注入攻击。攻击者旨在通过在合法网页或Web应用程序中包含恶意代码,在受害者的Web浏览器中执行恶意脚本。


SQL注入(SQLi)是一种注入攻击,它使得执行恶意SQL语句成为可能。这些语句控制Web应用程序后面的数据库服务器。攻击者可以使用SQL Injection漏洞绕过应用程序安全措施。


听起来很棒,对吧?您需要做的就是升级到最新版本的PHP。但首先...


检查PHP兼容性


正如我们刚刚讨论的那样,更新到最新版本的PHP有很多好处。但是,在进行更新之前,请确保检查您的网站使用的PHP版本。您还应该检查您的站点与最新版本的PHP的兼容性。


如果不确定使用的是哪个PHP版本,请按以下步骤检查:只需安装此免费的Display PHP Version插件。可以从WordPress插件存储库下载。


安装后,只需激活它,它就会显示您网站的PHP版本(您可以在WordPress仪表板的“概览”选项中找到它)。


最后的话


PHP的最佳实践一直是关于改善开发人员体验的。通常,在致力于该项目之前,您必须充分了解任何项目的所有利弊。现代PHP开发概念为您提供了一种真正简单的编写软件的方法。