2009-09-23 127 views
1

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

一切我读过有关班说,当我扩展类,我需要调用一个新的这样:

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

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

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

回答

0

这个怎么样,该类的源文件中,命名类(最有可能的构造也一样)然后扩展使用的东西类像

class SforceEnterpriseClient extends renamedClass {}; 

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

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

+0

好主意。我试图避免改变课程本身,所以当新版本出现时,我不必担心将更改加入其中。但每次有新版本时我都可以处理重命名。 完美,谢谢! – bbutle01 2009-09-25 13:32:00

0

不幸的是,这将是唯一的方法。你不能扭转不了情绪。对不起,祝你好运!

凯尔

1

你或许可以玩一些花样类加载与魔术__autoload()功能,并删除引用到Salesforce的文件即。 require,require_once,include,include_once;但为了可读性和可维护性,您应该在这里采用较长的路线并修改所有引用以使用子类。

0

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

0

也看看factory pattern。通常你应该保持课堂创作和商业逻辑分离。
所以当你遇到这样的问题,你只需要去改变工厂...

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

这样就可以避免在你的业务逻辑“新”的构建,使你的代码更管理