我有一个关于在PHP中扩展类的问题。
我在php网站上看到的例子在方法中只有一行代码...如果方法有大量代码,它是否相同?
如果这是基类:
class BaseClass {
public function WithWayTooMuchCode {
// like 100 lines of code here
}
}
如果我想使用相同的方法,但是只需更改1或2件事,我是否必须复制所有代码?
class MyOwnClass extends BaseClass {
public function WithWayTooMuchCode {
// like 100 lines of code here
// do I have to copy all of the other code and then add my code??
}
}
这对我来说似乎有些不干......
答案 0 :(得分:4)
是的,除非那些1或2件事情恰好在开头或结尾。您可以通过
调用父函数parent::WithWayTooMuchCode();
您可以将其置于子/覆盖方法的任何位置。
如果感觉不到干,请考虑将功能拆分为更小的方法。
答案 1 :(得分:4)
如果我想使用相同的方法,我是否必须复制所有代码, 但只改变1或2件事情?
不,您不必复制所有代码,假设您正在添加该功能而不删除它。
所以它如下:
class BaseClass {
public function WithWayTooMuchCode {
// like 100 lines of code here
}
}
class MyOwnClass extends BaseClass {
public function WithWayTooMuchCode {
parent::WithWayTooMuchCode();
//additionally, do something else
}
}
$moc = new MyOwnClass();
$moc->WithWayTooMuchCode();
答案 2 :(得分:2)
您可以使用parent :: WithWayTooMuchCode()执行父方法,然后添加代码。它看起来像这样:
class MyOwnClass extends BaseClass {
public function WithWayTooMuchCode {
parent::WithWayTooMuchCode()
// do I have to copy all of the other code and then add my code??
}
}
答案 3 :(得分:1)
你可以为你想在父类中单独做的事情写下一个单独的函数,然后以你的方式调用。
换句话说,分开你需要单独做的事情并为它们创建一个函数。并在儿童班中分别打电话给他们。子类中的最后一个函数将调用父类函数以及那些单独的函数。
答案 4 :(得分:1)
你有几个选择。假设;
class BaseClass {
public function WithWayTooMuchCode {
// like 100 lines of code here
}
}
你可以做到
class MyOwnClass extends BaseClass {
public function AnotherFunction() {
// put other code here
}
}
这允许你做MyOwnClass-> AnotherFunction()和MyOwnClass-> WithWayTooMuchCode()
或者你可以做到
class MyOwnClass extends BaseClass {
public function WithWayTooMuchCode() {
// put new code here
}
}
允许你运行MyOwnClass-> WithWayTooMuchCode()并且只运行“新代码”,而不是“100行”。
最后你可以做到
class MyOwnClass extends BaseClass {
public function WithWayTooMuchCode() {
parent::WithWayTooMuchCode();
// Do more processing
}
}
这将允许您运行MyOwnClass-> WithWayTooMuchCode()将运行“100行代码”和新代码。您可以在新代码之前/之后/期间放置父级,以便您可以根据需要进行定制
答案 5 :(得分:0)
除了其他答案,我应该指出,这个问题可以通过事件来解决。它们是一种在类中确定点的方法,您可以从外部添加自己的功能。如果您可以控制代码库以及时间/倾向,则可能需要考虑实现此功能。不幸的是,PHP并不直接支持它们,比如C#,所以你必须做work。
如果你只在一个地方遇到这个问题我怀疑你应该打扰,但如果它成为一种模式你可能想要考虑这种方法。