5

これは他の 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 の型が異なるため、これは即座に失敗します。同じことを達成するために実装できる回避策がたくさんあると想像できますが、できるだけ単純にしたいと思います。

4

4 に答える 4

9

わかりました、短い答えは次のようです:これは不可能です。PHP は、必要な型を私よりもよく知っています。

于 2013-05-13T17:07:50.363 に答える