找回密碼
 立即註冊
搜索
查看: 20|回復: 0

WordPress 抽象:WordPress 抽象最佳实践和插件

[複製鏈接]

4

主題

0

回帖

18

積分

新手上路

積分
18
元寶
0
收聽
0
聽眾
1
在線時間
2 小時
發表於 2023-11-12 13:46:38 | 顯示全部樓層 |閱讀模式
WordPress 是一个古老的 CMS,但也是最常用的. 由于其支持过时的 PHP 版本和遗留代码的历史,它尚未实现现代编码实践:WordPress 中的抽象就是一个例子。 例如,将 WordPress 代码库拆分为由 Composer 管理的包会更好。或者,从文件路径自动加载 WordPress 类。 本文将教你如何手动抽象WordPress代码并使用WordPress插件的抽象功能。 WordPress 集成和 PHP 工具的问题 由于其旧架构,我们偶尔会遇到将 WordPress 与 PHP 代码库工具集成的问题,例如PHPStan静态分析器、 PHPUnit单元测试库和PHP-Scoper命名空间搜索库。例如,考虑以下情况: 在支持PHP 8.0的WordPress 5.6到来之前,Yoast 报告描述了在 WordPress 核心中运行 PHPStan 如何导致数千个问题。


由于仍然支持 PHP 5.6,WordPress 测试套件目前仅支持 PHPUnit 最高版本 7.5,该版本已达到生命周期终点。 通过 PHP-Scoper 确定 WordPress 插件的范围是非常困难的。 我们项目中的 WordPress 代码仅占总数的一小部分;该项目还将包含与底层 CMS 无关的业务代码。但是,仅仅因 v 为您有一些 WordPress 代码,该项目可能无法与工具正确集成。 因此,将项目拆分为多个包可能是有意义的,其中一些包包含 WordPress 代码,另一些包仅包含使用普通 PHP 的业务代码,而没有 WordPress 代码。这样,这些最新的软件包就不会受到上述问题的影响,而是能够与工具完美集成。 什么是代码抽象? 代码抽象消除了固定的代码依赖性,生成通过契约相互交互的包。然后可以将这些包添加到具有不同堆栈的不同应用程序中,从而最大限度地提高其可用性。代码抽象的结果是一个完全解耦的代码库,基于以下支柱: 针对接口而不是实现进行编码。 创建包并通过 Composer 分发它们。 通过依赖注入将所有部分粘合在一起。



您想了解更多有关 WordPress 代码抽象的信息吗?从最佳实践到推荐插件,您需要了解的一切只需一键点击即可点击发推文 针对接口而不是实现编写代码 针对接口进行编码是使用契约使代码片段相互交互的实践。合约只是一个 PHP(或任何其他语言)接口,它定义了可用的函数及其签名,即它们接收的输入和输出。 接口声明功能的意图,但不解释功能将如何实现。通过接口访问功能,我们的应用程序可以依赖自主的代码片段来实现特定的目标,而无需知道或关心它们是如何实现的。这样,应用程序不需要适应切换到实现相同目标的另一段代码,例如来自不同供应商的代码。 合同示例 CacheInterface以下代码使用Symfony合约和CacheItemInterfacePHP 标准推荐 (PSR) 合约来实现缓存功能: use Psr\Cache\CacheItemInterface; use Symfony\Contracts\Cache\CacheInterface; $value = $cache->get('my_cache_key', function (CacheItemInterface $item) { $item->expiresAfter(3600); return 'foobar'; }); $cacheImplements ,它定义从缓存中检索对象的CacheInterface方法。get通过合约访问此功能,应用程序可能不知道缓存在哪里。无论是在内存、磁盘、数据库、网络还是其他任何地方。尽管如此,它仍然必须执行该功能。CacheItemInterface定义方法expiresAfter来声明项目应在缓存中保留多长时间。应用程序可以调用此方法,而无需关心缓存的对象是什么;他只关心自己要在里面呆多久。 针对 WordPress 中的接口进行编码 由于我们正在抽象 WordPress 代码,因此结果将是应用程序不会直接引用WordPress 代码,而是始终通过接口引用。

回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|女主臺灣論壇

GMT+8, 2024-10-5 13:21 , Processed in 0.059069 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回復 返回頂部 返回列表