1. ホーム
  2. php

[解決済み] 子のインスタンスから親の関数を呼び出すには?

2022-02-14 05:54:28

質問

私は、モデル

BaseUser.class.php
User.class.php
UserTable.class.php

ユーザークラスで delete関数をオーバーライドしています。

class User extends BaseUser {
   function delete(){
    }
}

では、親のdelete関数を呼び出すには・・・・・・?

$user = new User();
$user->delete();  // will call the overridden delete
$user-> ??  ;     // want to call parent delete

解決方法は?

技術的には、これは外部(パブリックインターフェース)からは不可能です。

理由を理解し(そうでなければ以下を読んでください)、実際に何をするのか分かっているのであれば、実際に機能を提供しない理由はないでしょう。

class User extends BaseUser {
   ... 
   function parentDelete(){
       parent::delete();
   }
   ...
}

user = new User();
$user->delete();  // will call the overridden delete
$user->parentDelete();     // want to call parent delete

しかし、もしそのようなことがあれば、それは継承を誤って使用したことになります。これは例外的な状況に違いありません。なぜなら、実際にそのようなことが必要な状況はまったく想像できないからです。

ですから、なぜその機能が必要なのかを考えて、よりよい提案をするようにしましょう。

<ブロッククオート

なぜそれがダメなのか?

非常に単純な理由:ソフトウェアでは、以下のことを知る必要はありません。 $user が親を持つかどうかです。そんなことは、まったく気にする必要のないことです。

これにより、ソフトウェアの中にある任意のユーザー・オブジェクトを、後からユーザーの子オブジェクトに置き換えることができるようになります。これは、時間の経過とともにソフトウェアを変更したい場合に重要です。

もし、内部の詳細をパブリック・インターフェースの一部にしてしまうと、物事の柔軟性を保つ可能性を奪ってしまうことになります。柔軟性がないというのは、本当に悪い状況です。