danslo / magento2-module-private-parts
允许您为非公开方法创建Magento 2插件。
dev-master
2020-11-20 17:24 UTC
Requires
- nikic/php-parser: ^4.10
This package is auto-updated.
Last update: 2024-09-21 02:00:00 UTC
README
PrivateParts是一个允许您为受保护和私有方法创建插件的Magento 2模块。
安装
$ composer require danslo/magento2-module-private-parts:dev-master
工作原理
负责为插件生成代码的类被扩展;
- 使其生成受保护方法
- 使其生成私有方法
- 任何调用私有方法的任何方法都将内联其方法体。只有当私有方法至少有一个插件时,才会调用内联代码。这是在运行时知道的,因此我们生成私有方法列表,并将
___isInlineCall
添加到拦截器特质中。 - 为了确保内联代码按正常工作,我们需要做几件事情
- 原始类中的任何
use
语句都需要复制到拦截器中。 - 属性读取/写入被转换为
___prop{Get|Set}
调用,这些调用使用反射来访问原始属性。 - 私有常量被内联。
- 原始类中的任何
目前已知限制(此列表可能在未来增长)
- 需要更多关于插件继承(父类的私有方法)的测试。
- 生成的代码缩进不正确,计划使用nikic php-parser的
printFormatPreserving
。 - 因为我们使用PHP Parser,代码生成比正常慢一些。运行时性能基本不受影响。
免责声明
您可能不想使用此包。
众所周知,在Magento中有许多地方使用私有方法,而没有正确应用组合,这使得扩展核心行为变得困难。
在这种情况下,建议您通过分发事件或提取逻辑到单独的类来使Magento可扩展。然后,您应该提交一个pull请求,并使用composer-patches,直到您的更改被合并到上游并发布。
虽然公共方法不一定在发布之间保持相同(除非用@api标记),但私有方法更容易发生变化。
此模块被编写为一个有趣的副项目,仅作为一个概念证明。目前没有任何生产环境中使用此模块。自行承担风险。
许可证
版权所有 2020 Daniel Sloof
在此协议下,任何人免费获得本软件及其相关文档文件(以下简称“软件”)的副本,可以不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向提供软件的个人或实体提供此许可,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按照“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于以下保证:适销性、特定目的适用性和非侵权性。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论是因为合同行为、侵权行为或其他,无论这些索赔、损害或其他责任是否源于、产生于或与软件或软件的使用或其他方面有关。