如何从类外部调用父方法


How can I call on a parent method from outside the class?

以以下示例为例:

class A implements Serializable {
    serialize() {}
}
class B extends A {
    serialize() {}
}

类A是一个持久但最小的类,用于每一页。类B是一个仅限临时管理员(用于设置屏幕)的类,它通过读取文件来填充成员。

我需要序列化对象并将其存储在数据库中两次,一次用于常规页面,第二次(使用寿命有限)用于管理页面。

$instance = new B(); // and populate
$data = serialize( $instance );

这将始终调用overrided方法。有没有什么方法可以将$instance强制转换为类型A,以便调用class A的序列化方法?

通过创建一个闭包是可能的,下面的代码段用于演示

<?php
interface Greeting
{
    public function hello();
}
class A implements Greeting
{
    public function hello()
    {
        echo "Say hello from A'n";
    }
}
class B extends A
{
    public function hello()
    {
        echo "Say hello from B'n";
    }
}
$b = new B();
$closure = function() {
    return parent::hello();
};
$closure = $closure->bindTo($b, 'B');
$closure(); // Say hello from A
$b->hello(); // Say hello from B

答案是否定的,你不能。子级重新声明该方法的父函数并完全覆盖它。为此,需要静态方法。