所以最近我提出了这个想法,在我自己的扩展版本的类中存储PrestaShop模块所需的一些非常常用的功能:
class MyModule extends Module { ...
可以存储在扩展类中的许多函数/公共代码行/缺少的功能。我想要做的是保留这个类,使用我加速模块开发所需的功能添加和改进它。所以稍后我可以把它弹出(这个类的最新版本)并大大减少代码行数:
require_once('core/classes/MyModule.php');
class MyModuleName extends MyModule { ...
但是,我也意识到如果应用程序(PrestaShop)有两个或更多使用此类的模块,我将无法做到这一点,因为会有类定义冲突。 PrestaShop确实具有覆盖功能,但它不是一个选项,因为如果它检测到已经覆盖的方法,则会抛出错误(不允许冲突)。我们制作了许多不同的模块,其中一些是我们更新的,其中一些我们不知道,所以我们不知道客户PrestaShop系统将拥有多少模块以及它们将具有哪些版本。每个模块应该是独立的,但不应与其他模块冲突(如果存在并使用扩展类)。
PHP Fatal error: Cannot redeclare class
在MyModule
的情况下,我需要访问Module对象($ this)来定义我的大部分扩展函数。
我也希望MyTools
类具有静态方法,但自然它面临同样的问题。您是否认为定义这样的辅助函数是可行的方法? :
if(!function_exists(myFunctionName)){
function myFunctionName(){
}
}
答案 0 :(得分:0)
在我看来,实现这一目标的最佳方法是在你使用的每个模块中复制你的类,因为这个原因:你的模块与外部类有依赖关系,后者会在时间上发生变化,所以如果你改变了什么模块A的助手类,因为模块B使用自己的助手,所以对模块B没有影响。这已经是PrestaShop如何处理一些模块以保持1.4和1.5版本之间的兼容性,每个模块上都有一个backward_compatibility /文件夹。