【发布时间】:2011-05-09 20:49:07
【问题描述】:
我有一个很大的班级,我将其分成更小的部分。
所以我有一个基类和一个扩展基类的新类。
我的问题是,我可以从基类调用扩展类吗?这似乎不对。
// a.php
class A {
// set all the properties and runs some validation and functionality in the process
}
// b.php
class B extends A {
// needs all the same validation as class A and adds more functionality
}
要开始这个过程我只能调用A类,例如:
$process = new A();
在 A 类中,我需要决定是否需要 B 类功能
class A {
if($condition) {
include_once('b.php');
$new_process = new B();
$new_process->doMoreStuff();
}
}
我可以添加 doMoreStuff()(还有很多功能),但这违背了使用更小的类文件大小的目的。
如果使用 A 类或 B 类,我知道正确的方法是创建一个包装脚本并将逻辑放入其中。但是还有其他原因导致我不能按照我的要求做吗?
更新:
所以让我澄清一下 A 类是什么:
A 类设置所有数据库连接、验证 INI 属性并设置初始日志记录值。 A 类也有处理特定请求的工作流/流程。
B 类需要 A 类的数据库、INI 属性和日志记录,但也提供了新的工作流/流程。我只是想将 A 的功能扩展到另一个类(以使其更易于管理)。
所以我认为应该有一个决策类 C 决定仅使用 A 类或扩展 A 类的 B 类。
只是想确认这是最好的选择,感谢您的意见
【问题讨论】:
-
它似乎效率不高。本质上,您现在正在加载两个 A 对象,而看起来好像只需要一个对象。如果 B 不是 A 的扩展类,那么上面的代码会更有意义。如果 A 类已经验证了数据,为什么 B 还需要包含验证?如果 B 需要来自 A 的值,A 是否可以通过方法参数将其值传递给 B?我想我们需要了解正在验证的内容才能给出一个好的答案。
标签: php class refactoring