我来自Java背景,目前正在学习PHP。我正在阅读"方法覆盖"用PHP。我不明白PHP中方法覆盖的用例。在Java中,所有的魔法都在运行时发生,我们可以使用"方法覆盖" for"运行时多态性"。在PHP中,它与父级和子级中的函数名称相同(我知道在PHP中没有数据类型)。
编辑:我想知道例如在java中的用例我可以在父类中定义区域方法,在运行时它决定是否根据子引用计算方形或三角形的区域。所以在类似的行上我我正在寻找解释。
答案 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 )