没有冲突的类的多个定义(版本)

时间:2014-07-28 17:38:54

标签: php oop namespaces

所以最近我提出了这个想法,在我自己的扩展版本的类中存储PrestaShop模块所需的一些非常常用的功能:

class MyModule extends Module { ...

可以存储在扩展类中的许多函数/公共代码行/缺少的功能。我想要做的是保留这个类,使用我加速模块开发所需的功能添加和改进它。所以稍后我可以把它弹出(这个类的最新版本)并大大减少代码行数:

require_once('core/classes/MyModule.php');

class MyModuleName extends MyModule { ...

但是,我也意识到如果应用程序(PrestaShop)有两个或更多使用此类的模块,我将无法做到这一点,因为会有类定义冲突。 PrestaShop确实具有覆盖功能,但它不是一个选项,因为如果它检测到已经覆盖的方法,则会抛出错误(不允许冲突)。我们制作了许多不同的模块,其中一些是我们更新的,其中一些我们不知道,所以我们不知道客户PrestaShop系统将拥有多少模块以及它们将具有哪些版本。每个模块应该是独立的,但不应与其他模块冲突(如果存在并使用扩展类)。

PHP Fatal error: Cannot redeclare class
  1. 我有什么方法可以实现这一点(使用名称空间或其他东西)?
  2. 有多个类的定义是不好的做法吗?
  3. 它会影响性能吗?
  4. MyModule的情况下,我需要访问Module对象($ this)来定义我的大部分扩展函数。

    我也希望MyTools类具有静态方法,但自然它面临同样的问题。您是否认为定义这样的辅助函数是可行的方法? :

    if(!function_exists(myFunctionName)){
       function myFunctionName(){
        }
    }
    

1 个答案:

答案 0 :(得分:0)

在我看来,实现这一目标的最佳方法是在你使用的每个模块中复制你的类,因为这个原因:你的模块与外部类有依赖关系,后者会在时间上发生变化,所以如果你改变了什么模块A的助手类,因为模块B使用自己的助手,所以对模块B没有影响。这已经是PrestaShop如何处理一些模块以保持1.4和1.5版本之间的兼容性,每个模块上都有一个backward_compatibility /文件夹。