- ベストアンサー
PHPコード読解教えてください
- PHP初心者がXAMPP環境で学んでいる中、コードの理解に困っています。
- 特にクラスのstaticメソッドやオブジェクトの処理順序について疑問があります。
- 質問内容の要点はコンストラクタやstaticメソッドの意味や役割に関するものです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず private name="姓名" private age= 20 この部分は private $name="姓名" private $age= 20 の誤りでしょう。 クラス、オブジェクトの根本的な部分は習得中でしょうし大変長くなりますので大きく省略してご質問だけに簡単に回答します。その為、厳密には正しくない表現も含みます。 > ●●および●●●・・>この部分のコードの存在意義が分かりません。 メンバ変数の宣言、及び初期化を行っております。 代入している値は多くの場合初期値として設定しますが、本クラスの場合コンストラクタで必ず代入させる必要があるようなのでほとんど意味を成していません。コンストラクタの引数がオプショナルだと省略時のデフォルト値としても使えます。(あえて意味を考えると変数の型がはっきりしますので、他の人かこのクラスを使う時に代入すべき型のサンプルとして可読性が向上します。) > ●●●●●・・>コンストラクタについてですが、全てのオブジェクトを処理するまで繰り返される、つまり"for"、"while"みたいなものとの理解でよろしいでしょうか? コンストラクタはインスタンスが生成(new)された時、必ず実行される部分とお考えください。 > ●●●●・・>クラス全体に関連付ける"static"ですが、いまいちよくわかりません。 インスタンス($pr1、$pr2)毎に別のプログラム(クラス)が存在すると考えるとわかり易いかもしれません。$pr1、$pr2それぞれnewしてますから、それぞれにclass personというプログラムが入っています。ですから同じプログラム(class person)でも$pr1->nameと$pr2->nameは別の値を保持しています。ところがstaticを付けた変数に限っては全てのインスタンス共通で同じ値を保持する事ができます。$countはインスタンスの総数(=人数)を数える為に利用していますが、staticでなければnewする度に初期化されてしまいます。だからstaticは$pr1->countといった参照ができません。person::$countとなります。言い換えると$pr1(鈴木)の総数ではなく、personの総数です。
お礼
丁寧かつ分かりやすいご回答ありがとうございます。 おかげさまで理解することができました。 独学でやっていると、細かい点が非常に気になり、それが書籍に説明がなされていないもので困ってしまいます。 その細かい部分を理解せずほったらかしにしたまま先のチャプターに進んでしまうと、その知識を発展させた内容のものが出てきて、そこでまたつまづいてしまい、結局途中挫折してしまう。 幸いなことにここではみなさん親身になって御回答くださるので何とか一つひとつクリアできており、心より感謝しておる次第でございます。 このカテゴリーではよく疑問点など質問しておりますので、お時間のあるときにでもまたご回答くだされば幸いです。 ありがとうございました。