私はYiiアプリケーションを開発しています。モデルの振る舞いで何らかの抽象メソッドを宣言することが可能かどうかは疑問です。私たちは、このクラスのinstanseを必要とするのでYiiビヘイビアの "抽象"メソッド
abstract class FantasticBehavior extends CActiveRecordBehavior
{
public abstract function doSomethingFantastic();
}
:私はそれは不可能直接次の宣言を使用することを知っています。でも、私はYiiが完全な魔法であることを知っています:)
私は、義務的な順序で振る舞いからメソッドを再宣言するためにオーナークラスを作りたいと思います。確かに、私は行動に加えてインターフェイスを使用することができますが...
私は何かを逃したか、何かが明確でない場合は申し訳ありません。尋ねると、私は何を意味するのか説明しようとします。
誰かがこれについて何か知っていますか?
ありがとうございます。
UPD
私はYiiのがちょうどPHPであることを理解してください。 PHPを拡張するものではありません。それは上の上層部です。 PHPにはないので、多重継承はありません。
抽象的なキーワードを使用して動作方法を宣言することはできません。それで、私は引用符で「抽象的な」という言葉を書いたのです。しかし、何でも。私は行動がどのように働くか知っています。
どういうわけか、モデル(たとえば、CActiveRecordの子)に何らかの方法を宣言することができたかどうかという質問でした。
は、例えば、私の目的のために、私はこのような何かを行うことができます。
class FantasticBehavior extends CActiveRecordBehavior
{
public function doFantasticThings()
{
$this->owner->prepareForFantastic();
// some code
}
}
をので、私は私のモデルと呼び出し方法doFantasticThingsにこの動作を添付した場合、このメソッドは、モデルからメソッドprepareForFantasticを呼び出すようにしようとします(所有者)。モデルにメソッドprepareForFantasticがない場合、宣言されていないメソッドが呼び出されるため、新しい例外がスローされます。
自分の質問に自分自身が答えたように見えます。これについてどう思いますか?
UPD2
はい、私たちは「抽象」メソッドを呼び出していない場合、我々は、それが宣言されていないことを知らないだろうことを知っています。解釈可能な言語の "魅力"です。コードが実行されるまでエラーがないかどうかはわかりません。しかし、できるだけ早くこのことを知ることができればすばらしいでしょう。たとえば、FantasticBehavior
-classのインスタンスがモデルに添付されると、CException
の子を投げて、モデルで宣言する必要のあるメソッドを示すことができます。これをachiveするために、我々は、下記のようなものを使用することができます
class FantasticBehavior extends CActiveRecordBehavior
{
public function attach($owner)
{
if(!/*$owner has declared methods list this->abstractMethods*/)
{
throw new CAbstractMethodNotDecalared('....');
}
parent::attach($owner);
}
public function abstractMethods()
{
return array('prepareForFantastic');
}
}
私たちは、クラスCBehavior
からメソッドattach
をオーバーライドして、「抽象」メソッドが宣言かどうかを確認する必要があります。メソッドabstractMethods
は、リスト "抽象"メソッドを取得するために使用されます。
attachBehavior
イベントが存在するかどうかわかりません。その場合は、attach
メソッドをオーバーライドする代わりに使用することができます。
このアイデアの使用「抽象」メソッドを使用する動作の基本クラス。
あなたはこれについてどう思いますか?
多分将来私はYiiの延長を行い、有名かつ豊かになるでしょうか? :))
こんにちは。お返事をありがとうございます。最新の記事を参照してください。 –
こんにちはもう一度:)更新された投稿を参照してください:)そしてあなたにもうれしいコーディング。 –