Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用相同的签名/名称调用父函数_Php_Oop_Inheritance_Extends - Fatal编程技术网

Php 使用相同的签名/名称调用父函数

Php 使用相同的签名/名称调用父函数,php,oop,inheritance,extends,Php,Oop,Inheritance,Extends,A和B具有相同签名的函数——让我们假设:foo($arg)——并且类A扩展了B 现在我有一个例子: $a = new A(); $a.foo($data); 我还可以通过$a运行父级(B)的foo()函数吗?还是它被重写了 谢谢! Nimi将被覆盖,但如果您想同时使用这两个选项,可以执行以下操作: function parentFoo($arg) { return parent::foo($arg); } function foo($arg) { $result = par

A和B具有相同签名的函数——让我们假设:
foo($arg)
——并且
类A扩展了B

现在我有一个例子:

$a = new A();

$a.foo($data);
我还可以通过
$a
运行父级(B)的
foo()
函数吗?还是它被重写了

谢谢!
Nimi将被覆盖,但如果您想同时使用这两个选项,可以执行以下操作:

function parentFoo($arg)
{
    return parent::foo($arg);
}
function foo($arg)
{
    $result = parent::foo($arg);
    // Do whatever you want
}
如果希望子函数调用父函数,请执行以下操作:

function parentFoo($arg)
{
    return parent::foo($arg);
}
function foo($arg)
{
    $result = parent::foo($arg);
    // Do whatever you want
}

有关更多信息,请参见此URL:

您可以使用您可以编写的类A中的
parent::foo()
访问父方法

parent::foo($param);

调用基类foo(…)方法。

是PHP中的字符串连接运算符。要调用方法,请使用
->

要调用重写的方法,请使用
parent::method()

我还可以通过$a运行父级的foo()函数吗?或者它被重写了吗

不是来自“外部”。说:


回答您的问题,不,您不能通过类A的对象调用父对象的foo()方法,因为对象A在其公共API中理解的唯一foo()方法是它自己的foo()方法。你可能需要考虑一下你的设计。如果B的foo()为A的foo()提供了不同的功能,那么其中一个应该覆盖另一个吗?或者您需要考虑A的foo()通过parent::foo()调用B的foo()——假设您希望在每次调用A的foo()时调用B的foo()。或者使用另一种模式。如果A的foo()并不总是适用于A的对象,那么您可能需要查看或pattern的


如果您是从OO编程开始的,我不能推荐足够高的级别。

感谢您的快速响应。这种方法很清楚,但是有没有任何方法可以从外部类访问foo(),而不生成B对象?在您的示例中,
$B
来自何处?Ehr,嗯,拼写错误发生了:)相应地编辑了示例。