如何从课外调用父方法?

时间:2013-12-14 14:53:33

标签: php inheritance casting

采用以下示例:

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

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

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

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

这将始终调用over-ridden方法。我有什么方法可以$instanceA,以便我可以调用class A的序列化方法吗?

2 个答案:

答案 0 :(得分:3)

可以通过创建一个闭包,然后按照以下代码片段进行演示

<?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

答案 1 :(得分:0)

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