15

すべてのクラス プロパティとメソッドの前に、パブリック、プライベート、または保護されたアクセス修飾子を使用する必要があると人々から言われ続けています。理由が本当にわかりません。私は新しいので我慢してください、しかし私がそれを見る方法はこれです:

  • 私のコードに取り組むのは私だけです。チームではありません。

  • 私はすでにすべてが何を意味するかを知っており、宣言されたすべての変数とプロパティを教えてくれるエディターを使用しているので、使用した変数を踏むつもりはないことを知っています。

私が得た説明の 1 つは、コードを「保護または非表示」にすることで、コードを見ることができる人から..しかし、PHP では、ユーザーが最初にコードを見ることができる方法がありません。私はそれを隠していますか?彼らが私のコードを見ることができれば、彼らはハッカーであるか、私のアカウントにいるので、とにかく彼らを止めることはできません.

チームで巨大なコードを扱っていた場合は理解できますが、小さなことについては不要に思えます。

4

4 に答える 4

29

コードを誰からも「隠している」わけではありません。それはナンセンスです。

protectedおよびprivateプロパティが行っていることは、それらをどのように使用するつもりかを PHP に伝えることです。クラスを作成するときは、通常、そのクラスをどのように使用するかを考えておく必要があります。public他のコードが対話できる部分と、他のコードに直接アクセスさせたくない部分があります。通常public、クラスの一部を、変更されない明確に定義されたメソッドの非常に小さなセットに制限する必要があります。コードの他の部分でそれらを使用すると、それらを変更するのが面倒になるためです。すべてのprivateおよびprotectedものは、クラス自体の中でのみアクセスする必要があるため、後で変更しても問題は少なくなります。

コードに取り組んでいるのがあなただけの場合、「プライベート パーツ」を使用しないのと同じくらい簡単だと言うかもしれません。しかし、間違いを犯すことはありますし、時間が経つにつれて、どの部分がどこに属しているかを忘れてしまいます。protectedこれらのプロパティを明示的にorとしてマークprivateすると、PHP は、独自の「使用条件」に違反しないようにすることができます。これは、 「これに触れないでください」という心のメモと、実際に何かにロックをかけることの違いです。

于 2012-06-06T05:44:42.737 に答える
6

「カプセル化」と呼ばれているように、コードを人から保護することはできません。ソース コードにアクセスできる人は誰でも、そこに何があるかを既に知っています。そして、彼らがソースを持っていない場合、彼らはあなたの公開されたものに対して特別なことをすることもできません.

これが行うことは、クラスにないコード (したがって、クラスがどのように動作するかを知る必要がない) が誤って内部変数をいじるのを防ぐことです。こうすることで、変数が変な値で終わる可能性が低くなります。変な値になった場合は、アプリの途中ではなく、クラスを指して壊れたコードがそこにあると言うことができます。

これがまったく有用であるためには、次のようなすべてに対して単純なセッターを使用することはできませんpublic function setX($x) { $this->x = $x; }--それは目的全体を無効にします。オブジェクトは可能な限り「ブラック ボックス」である必要があります。これは、外部コードがその内部状態をできるだけ確認および変更できないようにする必要があることを部分的に意味します。クラスに独自の状態を管理させ、仕事をするために必要な他のものを受け取るメソッドを持たせます。(ここでの半明白な例外は、主な目的がデータをやり取りすることである型ですが、そのデータではないものへのアクセスを制限する必要があり、そのようなデータのセッターは理想的にはそれを検証します。)

于 2012-06-06T05:42:37.647 に答える
6

私は、オペレータがあなたが自分の足で踏まないように助けていることを発見しました. 私のアプリケーションが大きくなるにつれて、以前のクラスのいくつかを作成し、私を保護するためのアクセス修飾子が役に立ったときに、当初の考えを見失うことがありました。また、何が何であるかを理解し、スパゲッティ コードのプログラミングに終始しないように、コードをより適切に整理するのにも役立ちます。また、将来誰かがあなたのコードを見てしまうような状況で誰かのためにプログラミングすることになる可能性は低いですが、言語の構造を使用することに慣れているため、コーディングスタイルに戸惑うことはありません。コードを構造化することは、コーディング スタイルを改善するのに役立ちます。構成要素はそこにあるのに、なぜそれらを使用しないのでしょうか?

したがって、現時点でのあなたの特定の状況について言えば、あなたが現在行っているのは、「うーん... 2年前に私のプロジェクトの1つのためにこのクラスを作成し、今すぐ使用します。

C# や C++ などのコンパイル済み言語を使用していない限り、修飾子によって潜在的なエンド ユーザーから実際のコードが隠されることはありません。これらの種類の言語でライブラリを作成する場合、修飾子は実際にエンド ユーザーからコードを隠してしまうため、さらに重要になります

于 2012-06-06T05:43:07.383 に答える
2

必要とされる主なものは、コードのカプセル化と一貫性のためです。そのため、コードの周囲で一貫したインターフェイスを冷静に保つことができます。

クラスを作成するときは、どの部分を公開/非公開で保護するかを示しています。また、データが他のクラスとどのように相互作用するかをアプリケーションで検討して設計することもできます。事業。

小さなプロジェクトでは役に立たないように見えますが、使い始めることを強くお勧めします。可視性修飾子を使い始めると、それらが非常に便利であることがわかります。

于 2012-06-06T05:45:07.803 に答える