代码之家  ›  专栏  ›  技术社区  ›  bbutle01

php扩展类

  •  1
  • bbutle01  · 技术社区  · 15 年前

    我读到的关于类的所有内容都表明,当我扩展一个类时,我需要调用新的类:

    class MySF extends SforceEnterpriseClient {};
    $mySforceConnection = new $MySF;
    

    这意味着我必须在所有现有代码中查找/替换。 是否可以用子对象覆盖父对象,这样我就不必玩查找/替换游戏?

    class SforceEnterpriseClient  extends SforceEnterpriseClient {};
    $mySforceConnection = new $SforceEnterpriseClient ;
    
    5 回复  |  直到 15 年前
        1
  •  1
  •   Asaph    15 年前

    您可能可以使用这个魔术来玩一些类加载技巧 __autoload() 函数并删除对salesforce文件的引用,即require、require\u once、include、include\u once;但是出于可读性和可维护性的考虑,您可能应该在这里走很长的路,修改所有引用以使用子类。

        2
  •  0
  •   Kyle J. Dye    15 年前

    不幸的是,这将是实现这一目标的唯一途径。你不能逆转先天性。对不起,祝你好运!

    凯尔

        3
  •  0
  •   Vincent Ramdhanie    15 年前

        4
  •  0
  •   NDM    15 年前

    还可以看看 factory pattern . 通常,您应该将类创建和业务逻辑分开。
    所以当你遇到这样的问题,你只需要去改变工厂。。。

    $sfEnterpriseClient = Factory::getSFEnterpriseClient($params);
    

    这样,您可以避免业务逻辑中的“新”构造,并使代码更易于管理

        5
  •  0
  •   Tom    15 年前

    那么,在类的源文件中,重命名类(很可能还有构造函数),然后使用

    class SforceEnterpriseClient extends renamedClass {};
    

    然后重命名该文件并使用旧名称创建一个新文件,并包括重命名的文件。将扩展版本的代码放入新文件中。最终的结果是,使用原始版本的每个文件都将看到新版本,而无需跟踪所有文件。

    推荐文章