PHP 中的树和树遍历
我将在本文中介绍树结构。什么是树,如何使用以及何种情况下使用、请注意,这只是一个基本的介绍,而不是整个故事。我甚至可能在某个地方错了,如果你认为我搞错了:请在评论中告诉我,或者给我发私信。🌳 什么是树?要回答这个问题,我们首先要看一下图(Graph)。在图论中,图(Graph)是以某种方式相互关联的数据点(或节点 Node)的(视觉)结构。例如,这种关系可以...
设计模式之访问者(Vistor)模式
访问者(Visitor)模式是一种行为模式,允许你将算法与它们的操作对象上分离。问题描述:假设你的团队开发了一款应用,它可以处理构造成一个巨大图形的地理信息。图中的每个节点可以代表一个复杂的实体,如城市,也可以代表更精细的东西,如工业、观光区等。如果节点所代表的真实对象之间存在道路,则这些节点与其他节点相连接。在底层中,每个节点类型...
Repositories 及其真实意图
由于使用了 Repository 模式,你已经替换了多少次底层数据库实现?这就是为什么,在这篇博文中,我想进一步澄清这个完全被误解的软件设计模式,以及为什么反对使用它的第一个论点(上面的问题)实际上是微不足道的,几乎无关紧要。定义 Repository首先,让我们从定义 Repository 实际是什么开始。Repository 模式在 PoEAA 中定义如...
PHP 8.4 预览: Sodium: AEGIS-128L 和 AEGIS256 支持
AEGIS 是基于 AES 的认证加密算法家族,其速度明显快于 AES-GCM。如果扩展是使用 libsodium 1.0.19或更高版本编译的,则 PHP 8.4 中的 Sodium 扩展支持 AEGIS-128L 和 AEGIS-256 加密算法。PHP 8.4 Sodium 扩展支持 AEGIS-128L 和 AEGIS256,使用的 PHP...
使用 PHP Sodium 扩展进行 AEGIS 加密
AEGIS 是 基于 AES 的认证加密算法家族,其速度明显快于普遍存在的算法,如 AES-GCM 和 CHACHA20-POLY1305 。如果扩展是使用libsodium 1.0.19或更高版本编译的,则 PHP 8.4 中的 Sodium 扩展支持 AEGIS-128L 和 AEGIS-256 加密算法。AEGIS 家族中的两种加密算法 A...
Laravel 中的 PHP 注解 attributes
Attributes 提供了在代码的声明中添加结构化、机器可读的元数据信息的能力:类、方法、函数、参数、属性和类常量可以是属性的目标。我相信这个定义是正确的,我相信阅读本文的大多数开发人员都至少遇到过一次 attributes 。如果没有,它们本质上是添加到类中的元数据。
Laravel Octane 现已支持 FrankenPHP
Laravel Octane 通过使用高性能服务器比如 Open Swoole、Swoole 和 RoadRunner 来提高应用的性能。2023 年 12 月 19 日起,它也开始支持 FrankenPHP。
FrankenPHP v1.0 发布
FrankenPHP 本周刚刚达成了一个重要的里程碑,发布了 v1.0 版本。FrankenPHP 是一个用 Go 编写的现代 PHP 应用程序服务器,只需一个命令就可以为您提供一个生产级 PHP 服务器。它提供了对 Symphony, Laravel, WordPress 等的原生支持:生产级 PHP 服务器,由 Caddy 驱动部署简单——将 PHP 应...
在 PHP 中使用匿名类测试抽象类
抽象类不能直接实例化,这为测试抽象类本身实现的功能时带来了挑战。在这篇文章中,我将分享我解决这一问题的方法。为了说明该技术,让我们假设有一个带有 move() 方法的抽象类 Vehicle,同时在其子类中强制实现 speed() 方法。/app/Utils/Vehicle.phpnamespace App\Utils; use Exception; ab...
Stressless: PHP 压力测试
PestPHP 发布了一个全新的插件:Stressless。这是 Pest PHP 家族的一个新成员,它为 PHP 生态系统带来了压力测试的能力。它与 Pest PHP 无缝集成,将压力测试的强大功能与 Pest 的 Expected API 的简洁和优雅相结合。正如你所看到的,开始使用 Stressless 是毫不费力的——你所需要做的就是使用 Compo...