PHP扩展一个类

时间:2012-05-11 15:15:53

标签: php oop

我有一个关于在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??
    }

}

这对我来说似乎有些不干......

6 个答案:

答案 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

如果你只在一个地方遇到这个问题我怀疑你应该打扰,但如果它成为一种模式你可能想要考虑这种方法。