• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP,privateの使用理由について)

PHPのprivate使用理由とは?

このQ&Aのポイント
  • PHPのプログラミングにおいて、privateなアクセス権を使う理由について説明します。
  • privateなメンバ変数を使うことで、そのクラス内でしか変数の値を変更できないように制限することができます。
  • publicなアクセス権を設定した場合、他のクラスや外部からその変数の値を書き換える可能性があるため、情報のセキュリティを確保するためにprivateを使用することが推奨されています。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 「オブジェクト指向 カプセル化」のような単語で検索するといろいろ出てくると思います。 簡単に言うと、publicですと利用先のクラスから直接値を書き換えることができ、意図しない動きになる可能性があります。 (プログラム時に注意すれば良いのですが、変数名が似ていたり等いろいろ要因はあります) 誰かによって書き換えられるのではなくコーディングミス等で書き換えられてしまう可能性あるということです。 または仕様変更時に、勝手に変数にアクセスしているとそこを全て変更しなければいけなくなったりします。 なのでクラス内の変数は全てprivateで定義し、getter,setterと呼ばれるメソッドを用意して、クラス内の変数にアクセスできるように作ります。

non05410
質問者

お礼

回答ありがとうございます。 >誰かによって書き換えられるのではなくコーディングミス等で書き換えられてしまう可能性あるということです。 そういうことだったのですね! 今までは悪意ある書き換えから守るためにと思っていましたが、その場合誰がどうやって?と悩んでいたので、これで納得することが出来ました。 本当にありがとうございました。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

publicでメンバ変数を作ると、以下のようなプログラムでは a_class 内の変数の値がクラスの外から書き換えられてしまいます。 class a_class { public $a; public function __construct () { $this->a = 0; } public function getA () { echo $this->a; } public function getA2 () { $this->a = 5; echo $this->a; } } $objA = new a_class; $objA->getA(); // ここでは 0 が表示される $objA->a = 3; $objA->getA(); // ここでは 3 が表示される $objA->getA2(); // ここでは 5 が表示される これが、以下のようなプログラムだと、エラーが発生してしまいます。 class file_class { public $a; public function __construct () { $this->a = fopen("hoge.txt", "r"); } public function getA () { echo fgets($this->a); } } $objF = new file_class; $objF->getA(); // ここでは hoge.txt の中身が1行表示される $objF->a = 3; $objF->getA(); // ここではエラーになる クラスの機能を阻害するような操作が外からできてしまいました。 そもそもメンバ変数はクラス内で使う共通な値を保持するために使うもので、クラスの独立性という面からも外から値を書き換えさせない事が理想だと思いますし、外部からのアクションで書き換えたいならメンバ変数の中身を書き換える関数を用意してあげるといいと思います。

non05410
質問者

お礼

分かりやすい例まで記述して頂き本当にありがとうございます。 今までは「$objF->a = 3;」という記述に対して、誰が何のためにと悩んでいた点が大きかったです。 決して悪意ある記述というわけでは無かったのですね。 また、クラスの独立性など改めて考えるきっかけとなりました。 本当にありがとうございました。