在PHP中使用方法覆盖的用例

时间:2014-12-31 12:52:47

标签: java php

我来自Java背景,目前正在学习PHP。我正在阅读"方法覆盖"用PHP。我不明白PHP中方法覆盖的用例。在Java中,所有的魔法都在运行时发生,我们可以使用"方法覆盖" for"运行时多态性"。在PHP中,它与父级和子级中的函数名称相同(我知道在PHP中没有数据类型)。

编辑:我想知道例如在java中的用例我可以在父类中定义区域方法,在运行时它决定是否根据子引用计算方形或三角形的区域。所以在类似的行上我我正在寻找解释。

2 个答案:

答案 0 :(得分:1)

我不确定你在问什么,但我认为你只需要php方法覆盖的例子。

Java案例,例如,您有一个具有2个参数的父级,并且您的子级具有额外参数是不可能的。但显然可以实现相同功能的不同实现。

所以父母

class parent
{

   protected function doStuff()
   {
      echo 'parent stuff';
   }
}

和一个孩子

class child extends parent
{

    /**
     * @overrides parent function
     */
     protected function doStuff()
     {
        echo "child stuff";
     }
}

这样你就拥有了什么。我不确定你不清楚哪个部分:你在PHP中的选项较少,然后在Java中(因此不允许使用不同的占用空间声明aN覆盖函数),你不能在同一个参数计数中使用2个函数或在儿童班。

但如果你需要,你可以在上面做。添加额外的步骤(例如,子类是一个具有被调用函数计数器的类,因此除了调用父类' doStuff'之外,它还可以增加内部计数器。这将是一个随机的用例

答案 1 :(得分:0)

在php中重写的实现非常简单。如果您的父类有一个功能。您可以在子类中创建具有相同名称的函数来覆盖该函数。通过在php中创建具有相同名称和不同参数的2个函数,无法实现覆盖的实现。因为我们不能在php类中创建超过1次的同名函数。要实现重载,我们需要在php中使用魔术方法。

class testParent
{
  public function f1()
   {
     echo 1;
   }
  public function f2()
   {
     echo 2;
   }
}
class testChild
{
  function f2($a) //overriding function f2
   {
     echo "$a";
   }
}
$a = new testChild();
$a->f2("Tushar");//it will print tushar

要覆盖php中的内置函数,您可以使用override_function

bool override_function ( string $function_name , string $function_args , string $function_code )