php扩展类

时间:2009-09-23 13:51:58

标签: php extension-methods

我正在使用名为SforceEnterpriseClient的salesforce类。我在我的应用程序中引用了很多地方的那个类。我想扩展该类,使其能够从1行记录集返回单个数组,现在记录集大约有3个级别。还有一些我想用它做的事情。我可以处理所有这些。

我读到的关于课程的所有内容都说当我扩展课程时,我需要调用新课程:

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

这意味着我必须找到/替换所有现有代码。 是否有可能用孩子覆盖父母,所以我不必玩寻找/替换游戏?

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

5 个答案:

答案 0 :(得分:1)

您可以使用魔术__autoload()函数播放一些类加载技巧,并删除对salesforce文件的引用,即。 require,require_once,include,include_once;但是为了可读性和可维护性,你应该在这里采取漫长的路线并修改所有引用以使用子类。

答案 1 :(得分:0)

不幸的是,这是唯一的方法。你不能反向继承。对不起,祝你好运!

凯尔

答案 2 :(得分:0)

在这种情况下,您可能不需要扩展该类。当您想要添加新功能或更改现有功能并保持原始类完好无损时,可以扩展类。通常这是要走的路。但是,如果您需要对现有类进行更改,然后更新对该类的所有引用以引用新类,为什么不简单地更改类代码本身?这样,引用就不必改变了。

答案 3 :(得分:0)

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

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

通过这种方式,您可以避免业​​务逻辑中的“新”构造,并使您的代码更易于管理

答案 4 :(得分:0)

这个怎么样,在类的源文件中,重命名类(也很可能是构造函数),然后使用像

这样的类来扩展类。
class SforceEnterpriseClient extends renamedClass {};

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

关于唯一的主要问题是当新版本的课程可用时会发生什么。