PhPには型キャストのようなものはありませんが、試してみることができます。Php、タイプキャスト(ダウンキャスト)(拡張クラスを取り除く)
class Entity extends Base
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($v)
{
$this->name = $v;
}
}
and its Base
abstract class Base
{
public function save()
{
}
}
は今エンティティがある:私は実体を持って
$e = new Entity();
と私はそれをメソッドに渡すことができます:
$this->callMe($e);
private function callMe (Entity $e)
{
$e->getName(); // OK!
$e->save(); // !!!!!!!!!!!! I DONT WANT IT
}
問題がある、私は渡したいですEntity
自身を削除し、継承されたプロパティをスキップします。他のルーチンを誰かに混乱させたくないからです。言い換えれば
// problem is too many parameters and not tight coupled enough
$this->callMe($e->getName(), $e->getWhatever());
または
// then no longer type hinting, just a "bag" array
$this->callMe($e->toArray());
が、私はクラスを継承し
を取り除きたい:もちろん、私のような何かを行うことができます。
継承を望まない場合は継承しないでください。代わりに合成を使用してください。 PS:私はあなたが "ダウンキャスト"を望んでいないと言います – zerkms