trismegiste / php-is-magic
PHP 有用的魔法技巧库
Requires
- php: >=5.4
This package is not auto-updated.
Last update: 2024-09-24 06:46:44 UTC
README
好吧,你已经知道 PHP 很慢,内存密集型,并且语法不一致。
那么,优点在哪里呢?
这种解释性语言有一些隐藏的魔法。这个库试图使用它,而不会弄乱你的项目。
Eval
"eval 是邪恶的"(听起来不错,我喜欢)。真的吗?Eval 非常强大。但是,强大的力量伴随着巨大的责任。大多数的模拟框架(例如 PHPUnit)使用 eval。所以,这是邪恶为善服务吗?似乎是这样的。
魔法方法 __call
这个魔法方法很强大,但它不能取代“强”类型提示。对于快速原型设计来说很实用,但它不适合进一步维护。谨慎使用。
反射
很久以前,在一个遥远的星系中,我用 VC++ 编程,RTTI 不是标准的一部分。后来,Java 有反射,但与平均速度相比非常慢。现在 PHP 有反射,并不比平均“慢”慢多少。使用它不是问题。
特质
特质非常高效。最初我很怀疑,但现在,有了良好的约定,我认为它是 PHP 的真正精华。它们具有多重继承的能力,并解决了 菱形问题。
闭包
我在谈论的是绑定闭包,即与对象相关联,而不是 lambda 函数。许多设计模式(如策略和命令)都可以从闭包中受益。
使用 PHP 解析 PHP
有一个叫作 nikic/PHPParser 的出色库,它也执行一些魔法。重新定义和动态更改类是可能的,但非常慢。
那么呢?
通过结合所有这些特性,我将尝试收集一些有用的魔法技巧,特别是当处理遗留代码时。我喜欢认为这里提供的工具大部分都是 模拟器,而不总是好的实践(特别是对于设计模式模拟器)
模拟器在开发早期阶段很有帮助,当时你的设计尚未完成,并且你想测试哪种模式最适合解决你的问题。好吧,至少比复制粘贴旧项目中的脚本要好一些:)
阅读此库的功能列表
备注
尽管魔法是潜在的 WTF 生成器,但我会通过强制使用接口、添加许多验证器以及防止某些工具的误用(例如 DecoratorBuilder)来尽量减少问题。
这也是探索新功能中常见模式的一种方式。例如,我相信特质将改变 PHP 框架的未来(实际上它已经开始改变了)。
文档
我为每个工具在其文件夹中编写了 README。
待办事项
- symfony 的捆绑包