-2

privatePHP では、メソッドとメソッドの間に大きな違いはないようですprotected

PHP Chatroom で使用する理由を尋ねたところ、次のような回答が得られました。protected

そうしない正当な理由がない限り:はい
、正当な理由は、コードがクローズドソースライブラリ
であり、それでも、リフレクションでオーバーライドできる場合です

そう -

privateメソッドがリフレクションでオーバーライドされる可能性がある場合、メソッドのポイントは何privateですか?

4

3 に答える 3

9

privateprotected正しいことを行うコードを簡単に記述できるようにするために存在します。お気づきのように、それらは壊れないわけではありません。必要に応じてバイパスすることを妨げるものは何もありません。これは、積極的にしようとすることからではなく、間違ったことを誤って行うことから保護することを目的としているためです。

リフレクションでそれらをバイパスできるということは、そうすべきだという意味ではありません。「壊れたら保証無効」ステッカーのようなものprivateと考えることができます。protectedそれらを無視して自分で直接いじると、オブジェクト/クラスが正しく動作しない可能性があります。 内部をいじるのはあなた自身の責任なので、その時点で .

さて、タイトルの質問については...protectedサブクラス専用のインターフェイスを宣言するために使用します。あなたは基本的に、彼らがそのものを直接使用するつもりであると宣言しますが、privateそうではないと言います。彼らがそれを無視するかどうかは彼ら次第ですが、もしそうなら、彼らを台無しにしてください. あなたは彼らに警告しようとしました。

于 2012-07-16T17:03:52.233 に答える
1

はい、リフレクションを使用してオーバーライドできますが、それは重要ではありません。重要なのは、通常の使用でメソッドへのアクセスを制限することです。つまり、誰かがクラスを使用している場合、そのクラスのコントラクトに違反しているため、そのメソッドにアクセスできないようにする必要があります。もっている。

用途に応じてプライベート/保護されているため、誰かがメソッドをプライベートにした場合は、別のクラスからアクセスする必要がないため、メソッドを実行しました。保護した場合は、意図しただけである可能性があります。メソッドにアクセスできるようにするサブクラス。

于 2012-07-16T16:52:13.553 に答える