danslo/magento2-module-private-parts

允许您为非公开方法创建Magento 2插件。

安装: 7

依赖: 0

建议者: 0

安全: 0

星标: 9

关注者: 2

分支: 1

开放问题: 0

类型:magento2-module

dev-master 2020-11-20 17:24 UTC

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

在此协议下,任何人免费获得本软件及其相关文档文件(以下简称“软件”)的副本,可以不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向提供软件的个人或实体提供此许可,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按照“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于以下保证:适销性、特定目的适用性和非侵权性。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论是因为合同行为、侵权行为或其他,无论这些索赔、损害或其他责任是否源于、产生于或与软件或软件的使用或其他方面有关。