【发布时间】:2014-01-02 07:08:15
【问题描述】:
举个例子:
class A implements Serializable {
serialize() {}
}
class B extends A {
serialize() {}
}
A 类是在每个页面上使用的持久但最小的类。 B 类是临时管理员(在设置屏幕上使用)类,它通过读取文件来填充成员。
我需要将对象序列化并存储在数据库中两次,一次用于常规页面,第二次(寿命有限)用于管理页面。
$instance = new B(); // and populate
$data = serialize( $instance );
这将始终调用被覆盖的方法。有什么方法可以将$instance 转换为A,以便调用class A 的序列化方法?
【问题讨论】:
-
如何发送一个令牌而不是强制转换并从 B 的方法中检查它以检查是否被调用 A 的方法
-
@silentboy 您不能在序列化的同时发送其他参数。已经试过了。
-
用另一种方法包装它。
-
重写方法的全部意义在于阻止你想要做的事情。当从类外部调用该方法时,将调用该方法的覆盖版本。当然,您可以在子类中创建一个完全不同的方法,除了通过
parent::serialize();调用您想要调用的父方法之外什么也不做 -
@santosh,我向派生类添加了一个新方法并使其调用父类。 TBH 我不记得为什么我需要这个功能。我想我是在尝试模仿 C++ 类的多态性。
标签: php inheritance casting