ホームページ >バックエンド開発 >PHPチュートリアル >PHPにおけるクラスの継承関係、PHP継承関係_PHPチュートリアル

PHPにおけるクラスの継承関係、PHP継承関係_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:46:27805ブラウズ

PHPにおけるクラスの継承関係、PHPの継承関係

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 で設定できます。

上記に誤りがある場合は、時間内に修正してください、ありがとうございます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1033980.html技術記事 PHPにおけるクラスの継承関係、PHPの継承関係 PHPではクラスを書き、そのクラス内に共通のメソッドを書き、サブクラスに継承させて対応する関数を取得することがよくあります。おおよそこれを想定してください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。