【发布时间】:2013-05-09 21:03:08
【问题描述】:
我可能在这里遗漏了一些明显的东西,因为这是其他 OOP 语言的基本功能,但我正在努力使用 PHP 的方式来做到这一点。我知道 PHP 不是“真正的”OOP 语言,但仍然......
我所追求的是将实例化为派生类的对象转换为基类。大致如下:
class Some{}
class SomeMock extends Some {}
function GetSomeMock(){
$mock = new SomeMock();
return (Some)$mock; //Syntax error here
}
我发现了一些关于将基类的对象向下转换为派生的奇怪请求的问题,这可以通过一些讨厌的调整来实现,但是这个基本功能不必那么困难。我在这里错过了什么?
编辑:似乎我想要实现的目标总是很重要。没问题。 GetSomeMock() 是一个工厂方法,它将返回一个具有预期属性值的模拟对象存根(从基类派生,所有属性都预先填充在构造函数中)。然后我会将它与从数据库恢复的另一个基本类型的对象进行比较:
$this->assertEquals($mockObject, $realObject);
这会立即失败,因为 $mockObject 和 $realObject 是不同的类型。我可以想象有很多变通方法可以实现,但我想让事情尽可能简单。
【问题讨论】:
-
你想达到什么目的?由于静态类型检查,某些语言需要这样做,但 PHP 使用动态类型。
-
我了解 PHP 不是“真正的”OOP 语言这不准确,尤其是从 5.3 版开始。
标签: php oop inheritance casting