构建可维护的 PHP 应用:思考数据与思考业务流程
互联网上的大多数教程以及其他正规或非正规教育,都教会开发人员如何用 CRUD 思维构建项目,CRUD 思维高度技术化,专注于数据操作,类似于 Excel 的发明初衷,几十年来一直在做它的工作。这是可以理解的,因为编程的入门材料需要简单易用。不要误解我的意思,作为一个起点,内容对初学者来说很好,但当构建真实世界的项目时,它们比学习材料中显示的更复杂。如果你真的...
在 PHP 中使用 ScraperAPI 爬取 Google 网页搜索
当你手动做事时,在网上抓取数据是一个令人厌烦的过程。例如,如果碰巧使用 PHP 进行操作,则需要执行以下步骤。使用 file_get_contents() 函数获取网站内容使用 DOMDocument 类解析内容然后使用 loadHTML()函数加载数据最后,使用 getElementsByTagName() 函数遍历 DOM 树虽然这是有效的,但这是一个乏...
修复 MySQL 8.4 的 "mysql_native_password is not loaded" 插件未加载错误
MySQL 8.4(截至 2024 年的最新 LTS 版本)中引入的一个主要变化是,默认情况下不再启用 “MySQL Native Password” 插件。此更改会影响使用 MySQL 数据库和 mysql_native_password 身份验证插件的 PHP 和其他应用。由于默认情况下不再加载 mysql_native_password 插件,因此 ...
一些新的数组函数正在加入 PHP 8.4
PHP 8.4 仍在开发中,到目前为止已经有了一系列新功能和改进。新功能不断出现,其中一个最近出现的功能是添加了新的数组方法。有一个 RFC(仍处于投票阶段),它建议添加这些新方法,这些方法本质上与检查数组中是否存在与特定条件匹配的元素有关。新方法是:array_find、array_find_key、array_any、array_all、array_find 方...
PHP 8.4 中是否实现不带额外括号的类实例化?
略去 new 表达式周围括号的 RFC 可能会出现在 PHP 8.4 中。该 RFC 目前处于投票阶段,有 21 张“赞成”票和 3 张“反对”票。投票将于 5 月 24 日结束,因此 ⅔ 的投票仍有可能失败,但乐观地说,看起来它正朝着正确的方向前进。自从引入了实例化期间的成员访问,你必须将 new MyClass() 调用封装在括号中,否则将出现解析错误。...
PHP 8.4: OpenSSL: OpenSSL 版本最低要求提升到 1.1.1
PHP OpenSSL 扩展为 PHP 提供了加密、身份验证、密钥交换、密码哈希和通用哈希功能。OpenSSL 扩展使用 OpenSSL 库来提供此功能。在 PHP 8.4 及更高版本上,构建 OpenSSL 扩展的最低要求从 1.0.1 增加到 1.1.1。该扩展也继续与 OpenSSL 兼容。请注意,OpenSSL 1.1.1(2018 年 9 月发布)...
属性钩子在 PHP 8.4 中越来越接近现实
属性钩子(Property Hooks)的 RFC 通过了一个重要的里程碑,获得了压倒性的 34 张赞成票和 1 张反对票。这远远高于通过所需的 ⅔ 多数票。PHP 中的属性钩子是什么?以下是 RFC 的提案摘要:开发人员经常使用方法来包装和保护对对象属性的访问。对于这种逻辑,有几种非常常见的模式,在实践中,重复实现这些模式可能很繁琐。或者,开发人员可以使用...
如何修复 Windows 上 PHP Curl HTTPS 证书授权问题
成功的 HTTPS 请求涉及 HTTP 客户端根据已知和受信任的根证书列表验证服务器提供的 TLS证书。PHP Curl 扩展也一样;Curl 扩展使用 libcurl 来发出 HTTPS 请求,而 libcurl 又使用 TLS 库(如 OpenSSL)来验证请求。Curl 扩展需要一个包含所有受信任根证书的有效文件来完成 HTTPS 验证,PHP在 php...
PHP 8.4: 隐式 nullable 参数声明弃用
PHP 8.4 中的重要弃用这是 PHP 8.4 中重要的弃用,由于 PHP 8.4 中的这一更新,旧版 PHP 应用可能会出现弃用通知。PHP 支持为函数参数、返回值、类属性、类常量和枚举声明类型。PHP 是一种动态类型语言,有着几十年的历史,多年来得到了一些改进和特性。随着标量类型(PHP 7.0)、 nullable 的类型(7.1)、类型化属性(7....