PHPでは共有メソッドを書くクラスを書き、サブクラスに継承させて対応する関数を取得させることがよくあります。大まかに次のような親クラスがあると仮定します:
リーリー次に、それを継承するサブクラスを作成します。
リーリーこのときサブクラスをインスタンス化すると、結果は我是子类的构造方法~
!
当然,因为继承
关系,所以子类是可以调用父类的say()
メソッドになります。
親クラスのコンストラクターを実装したいが、サブクラスのコンストラクターも実装したい場合は、次のように実行できます:
リーリーこの時点で出力されます我是父类的构造方法!
和我是子类的构造方法~
。
そのようなメソッドをサブクラスで定義するとします:
リーリーこの時点で親クラスから継承したことになりますsys()
方法将会被重写,所以调用后输出的结果就是:我是子类的say
。
このように定義するとどうなるでしょうか?
リーリーこの書き方はまだ大丈夫です。 PHP と他の強く型付けされた言語の違いは、PHP の書き換えメソッドでは、書き換えたメソッドを「上向きに公開」することはできますが、「下向きにプライベート化」することはできないことです。たとえば、ここで private
と定義すると、間違いなくエラーが報告されますが、C++ のような言語ではまったく逆のことが行われます。
この状況に対する PHP の考えは、現時点では、あなたの父親が保護レベルの継承をあなたに与え、それを他の人と共有することを許可している、つまり public であるということです。 code> ですが、自分で隠すことはできません。つまり、<code>public
,但不允许你自己藏起来,也就是private
、すべてを独り占めすることは絶対にできません。
この時点で必ず疑問に思うでしょう、親クラスの say()
が say()
设置为private
会怎样?
结果不会怎样,就是父类已经私有化了,子类根本继承不到,所以你在子类中的say()
に設定されている場合はどうなりますか?
結果は同じではありません。つまり、親クラスがプライベート化されており、サブクラスはそれをまったく継承できないため、サブクラスの say()
メソッドを次のように決定できます。あなたが好きです。
もう 1 つ問題があります。つまり、親クラスが既にオプションのパラメーターを使用して sys()
定義しているため、次のようにパラメーターなしでサブクラスに定義するとどうなるでしょうか。
結果は通常どおり実行できますが、E_STRICT
レベルのプロンプトが表示されます。その理由は、PHP の標準ではパラメータの数を親クラスに合わせる必要があるためです。もちろん、エラー レベルは php.ini で設定できます。
上記に誤りがある場合は、時間内に修正してください、ありがとうございます。