• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPコード読解教えてください)

PHPコード読解教えてください

このQ&Aのポイント
  • PHP初心者がXAMPP環境で学んでいる中、コードの理解に困っています。
  • 特にクラスのstaticメソッドやオブジェクトの処理順序について疑問があります。
  • 質問内容の要点はコンストラクタやstaticメソッドの意味や役割に関するものです。

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

  • ベストアンサー
  • kalkichi
  • ベストアンサー率64% (22/34)
回答No.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の総数です。

--w--
質問者

お礼

丁寧かつ分かりやすいご回答ありがとうございます。 おかげさまで理解することができました。 独学でやっていると、細かい点が非常に気になり、それが書籍に説明がなされていないもので困ってしまいます。 その細かい部分を理解せずほったらかしにしたまま先のチャプターに進んでしまうと、その知識を発展させた内容のものが出てきて、そこでまたつまづいてしまい、結局途中挫折してしまう。 幸いなことにここではみなさん親身になって御回答くださるので何とか一つひとつクリアできており、心より感謝しておる次第でございます。 このカテゴリーではよく疑問点など質問しておりますので、お時間のあるときにでもまたご回答くだされば幸いです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • phpのプログラム

    php初心者です。 以下がうまく実行できません。 どなたかご教授お願いします。 <html> <body> <?php $pr1 = new Person; $pr2 = new Person; ?> <table border = "2"> <tr bgcolor = aqua> <th>名前</th> <th>年齢</th> </tr> <?php $pr1->setname("佐藤"); $pr1->setage(34); $pr2->setname("田中"); $pr2->setage(45); print"<tr><td>"; print $pr1->getname(); print "</td><td>"; print $pr1->getage(); print"</td></tr>" print"<tr><td>"; print $pr2->getname(); print "</td><td>"; print $pr2->getage(); print"</td></tr>" ?> </table> <?php class Person{ private $name = "姓名"; private $age = 20; public function setname($nm) { $this->name = $nm; } public function setage($ag) { $this->age = $ag; } public function getname(){return $this->name;} public function getage(){return $this->age;} } ?> </body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • php クラス

    phpエクラスの勉強をしているのですが、参考書に書いているメンバ変数に値を代入している意味がよくわからないので教えてください。メンバ変数の値を書かなくtも動作できるのになぜ必要なのでしょうか? 参考書 <html> <head> <title>サンプル</title> </head> <body> <?php $pr = new Person; $pr->name = "鈴木"; $pr->age = 56; ?> <table border="2"> <tr bgcolor="#AAAAAA"> <th>名前</th> <th>年齢</th> </tr> <?php print "<tr><td>"; print $pr->getname(); print "</td><td>"; print $pr->getage(); print "</td></tr>"; ?> </table> <?php class Person { public $name ="姓名"; public $age = 20; function getname(){return $this->name;} function getage(){return $this->age;} } ?> </body> </html> テスト <?php class Person { public $name ;←ここに値を格納する意味 public $age ;←ここに値を格納する意味 function getname(){return $this->name;} function getage(){return $this->age;} } ?>

    • ベストアンサー
    • PHP
  • php クラス

    クラスの勉強をしているのですが、 記憶寿命をfunctionの中で完結させsample2以降でも同じ変数などを使えるようにするため定義済み関数内でクラスを処理したいのですが下記のエラーが出てしまいます。 functionの中でクラスを簡潔させるにはどのようにすればよいでしょうか?また、これはなぜエラーが起きているのでしょうか? function sample1(){ $pr=new parson; $pr->name="鈴木"; $pr->age=56; print $pr->getname(); print $pr->getage(); class parson { public $name="鈴木"; public $age=56; function getname(){return $this->name;} function getage(){return $this->age;} }} sample1(); Fatal error: Uncaught Error: Class 'parson' not found in hoge/class.php:11 Stack trace: #0 /hoge/class.php(27): sample1() #1 {main} thrown in /hoge/class.php on line 11

    • ベストアンサー
    • PHP
  • PHPの読解お願いいたします

    PHP初心者です。 環境 XAMPP1.7.0(最新) アパッチなど一括ダウンロード OS:ビスタ 多次元配列について以下のコードについて疑問があります。 ●の部分が疑問点となっております ~~~~~~~~~~~~~~~~~~~~~~~~~~~ <body> <table border="2"> <tr> <th>都市名</th><th>最高気温</th><th>最低気温</th> </tr> <?php $data=array( array("東京",32,25), array("名古屋",28,21), array("大阪",27,20), array("京都",26,19), array("福岡",27,22), ) foreach($data as $city){ print "<tr>"; ● foreach($city as $value) print "<td>{$value}</td>"; ●● } print "</tr>"; ?> </table> </body> </html> ~~~~~~~~~~~~~~~~~~~~~~~~~~ ●・・ここで<tr>を持ってくる必然性がわかりません。 例えば print "<td>{$value}</td>"のコードの<td>の横に付けることでも可能ではないのしょうか? ●●・・foreachがネストになり、多次元配列となっています。 まず$dataを取得しそれぞれを$cityに格納、次のforeachで$cityに格納された1行目のarray("東京",32,25)を一つづつ$valueに格納していくのだとは思いますが、例えばこのforeachネストの一連の流れを以下のように1つのforeachで記載することがなぜエラーになるのか分かりません。 foreac($data as $city){ print "<tr><td>{$city}</td></tr>" } $cityの中にはarray("東京",32,25) array("名古屋",28,21), array("大阪",27,20),array("京都",26,19),array("福岡",27,22), が格納されているので、別にこれをネストして{$value}に格納しなくてもそのまま変数$cityのみで表を作成できるのではないかと思っています。 まあでもエラーが出ますので、私の考えに大きな誤りがあるわけですが、誤っている部分をご指摘ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 予約フォームのPHPの書き方について

    はじめまして。PHP初心者です。個人事業のHPを作成しており、予約システムを導入する為、MTS Simple Bookin C Ver.1.4.0 をインストールし、予約に必要な項目をhttps://www.nishi2002.com/3502.htmlやhttp://www.amagistudio.com/reservedemonstration/を参考に作成中です。 必要項目の plan groom_name groom_frigana groom_age bride_name bride_frigana bride_age arrival_date departure_date hotel を手順通りに追加し、予約フォームの入力まはで出たのですが、入力の確認が出てきません、、、 何が原因かご教授頂けましたら幸いです。 【 mtssb-booking-form.phpの編集】 737行辺りから <?php if (0 < $this->clcols['plan']) : ?><tr>    <th><?php echo apply_filters('booking_form_plan', 'プラン') ?></th> <td>        <?php echo esc_html($client['plan']) ?> <input type="hidden" name="booking[client][plan]" value="<?php echo esc_html($client['plan']) ?>" /> </td> </tr><?php endif; ?> <tr> <th>予約人数</th> <td> <?php foreach ($this->controls['count'] as $key => $val) : ?><div class="input-number"<?php echo $val != 1 ? ' style="display:none"' : '' ?>><?php $title = apply_filters('booking_form_count_label', __(ucwords($key), $this->domain)); if ($title != '') { echo "$title<br />"; } ?> <?php echo esc_html($client[$key]) ?><input type="hidden" name="booking[client][<?php echo $key ?>]" value="<?php echo esc_html($client[$key]) ?>" maxlength="5" /><?php echo apply_filters('booking_form_count_note', '') ?> </div><?php endforeach; ?> <?php if (isset($this->errmsg['count'])) : ?><div class="error-message"><?php echo $this->errmsg['count'] ?></div><?php endif; ?> </td> </tr> <tr> <td class="option-confirm-header" colspan="2"><?php echo apply_filters('booking_form_client_title', 'ご連絡先') ?></td> </tr> <?php if (0 < $this->clcols['company']) : ?><tr> <th><?php echo apply_filters('booking_form_company', '会社名') ?></th> <td> <?php echo esc_html($client['company']) ?> <input type="hidden" name="booking[client][company]" value="<?php echo esc_html($client['company']) ?>" /> </td> </tr><?php endif; ?> <?php if (0 < $this->clcols['groom_name']) : ?><tr> <th><?php echo apply_filters('booking_form_groom_name', 'ご新郎様のお名前') ?></th> <td> <?php echo esc_html($client['groom_name']) ?> <input type="hidden" name="booking[client][groom_name]" value="<?php echo esc_html($client['groom_name']) ?>" /> </td> </tr><?php endif; ?> <?php if (0 < $this->clcols['groom_furigana']) : ?><tr> <th><?php echo apply_filters('booking_form_groom_furigana', 'フリガナ') ?></th> <td> <?php echo esc_html($client['groom_furigana']) ?> <input type="hidden" name="booking[client][groom_furigana]" value="<?php echo esc_html($client['groom_furigana']) ?>" /> </td> </tr><?php endif; ?> <?php if (0 < $this->clcols['groom_age']) : ?><tr> <th><?php echo apply_filters('booking_form_groom_age', '年齢') ?></th> <td> <?php echo esc_html($client['groom_age']) ?> <input type="hidden" name="booking[client][groom_age]" value="<?php echo esc_html($client['groom_age']) ?>" /> </td> </tr><?php endif; ?> <?php if (0 < $this->clcols['bride_name']) : ?><tr> <th><?php echo apply_filters('booking_form_bride_name', 'ご新婦様のお名前') ?></th> <td> <?php echo esc_html($client['bride_name']) ?> <input type="hidden" name="booking[client][bride_name]" value="<?php echo esc_html($client['bride_name']) ?>" /> </td> </tr><?php endif; ?> <?php if (0 < $this->clcols['bride_furigana']) : ?><tr> <th><?php echo apply_filters('booking_form_bride_furigana', 'フリガナ') ?></th> <td> <?php echo esc_html($client['bride_furigana']) ?> <input type="hidden" name="booking[client][bride_furigana]" value="<?php echo esc_html($client['bride_furigana']) ?>" /> </td> </tr><?php endif; ?> <?php if (0 < $this->clcols['bride_age']) : ?><tr> <th><?php echo apply_filters('booking_form_groom_age', '年齢') ?></th> <td> <?php echo esc_html($client['bride_age']) ?> <input type="hidden" name="booking[client][bride_age]" value="<?php echo esc_html($client['bride_age']) ?>" /> </td> </tr><?php endif; ?> 続き→ https://okwave.jp/qa/q9532258.htm

    • 締切済み
    • PHP
  • phpについて質問です。

    php初心者です。 以下のようなコードを書きました。テストの点数を配列に用意し最大値を表示したいのですがうまくいきません。 どなたかご教授お願いします。 <html> <body> <?php $score = array(20, 21, 59, 100, 78); $max = 0; ?> <table border = "2"> <tr bgcolor = aqua> <th>番号</th> <th>点数</th> </tr> <?php for($i=0; $i<count($score); $i++){ if($max < $socre[$i]) $max = $score[$i]; print"<tr>"; print"<td>{$i}</td><td>{$score[$i]}</td>\n"; print"</tr>\n"; } print"</table>\n"; print"</br>\n"; ?> <?php print"最高点は{$max}です。\n"; ?> </body> </html> foreachをつかえばうまくいきました。 for文ではいけないのでしょうか。 最大値が0と表示されるのでどうやらif文の条件分岐がうまくいってないようなのですが..... 初心者なので勘違いをしているところがあると思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 自動で増えてくれるPHP

    以前に質問させて頂いた内容をもとに、以下のようなものを作成しました。 以前の質問 → http://okwave.jp/qa/q6858703.html 作成したもの ↓ 【Aサーバ】「a.txt」(データ用) $name01='一子'; $age01='11'; $name02='二郎'; $age02='22'; 【Bサーバ】「b.html」(表示用) <?php $data = file_get_contents ('http://www.A/a.txt'); foreach (explode("\n" , $data) as $value) { if (preg_match ("/\\$(.+)='(.+)'/", $value, $matches)) { $$matches[1] = $matches[2]; } } echo '<table>'; echo '<tr><th>'.$name01.'</th><td>'.$age01.'</td></tr>'; echo '<tr><th>'.$name02.'</th><td>'.$age02.'</td></tr>'; echo '</table>'; ?> ここで質問なのですが、↑のような仕組みで、a.txtの中身が $name03='三太'; $age03='33'; $name04='~~'; $age04='~~'; と増えていった場合、b.htmlの echo '<tr><th>'.$name~~.'</th><td>'.$age~~.'</td></tr>'; が自動的に増えてくれるようなものを作りたいと考えています。 配列(?)を使うという方法も調べてみたのですが、分からず……。 ご教示願います。

    • ベストアンサー
    • PHP
  • thisとvar ?

    javascript初心者です。 コンストラクタ(プロトタイプ)とクロージャを学んでいますが、 コンストラクタ(プロトタイプ)では、関数内にthisで変数宣言、クロージャはvarで宣言しています。 この違いの理由は何でしょうか?漠然とした質問ですみません。 thisとvarでの変数宣言の違いなど教えていただけないでしょうか? コンストラクタ-------------------- function Person(n){ this.name = n; } Person.prototype.city = 'Tokyo'; Person.prototype.moveTo = function(c){ document.write(this.name + ': Moving to... ' + c + '<br>'); Person.prototype.city = c; } クロージャ------------------- function Person(n, a){ var name = n; var age = a; return { getName: function() { return name; }, setAge: function(i){ if( 0<= i ){ age = i; } }, getAge: function(){ return age; } } }

  • PHP テーブル内容にリンク付をつけて検索したい

    以下のような2つのPHPを作成しました。 PHPにおいて、検索ボタンが押されると、 SQLで記述したデータベースから値を持ってきてtable表示させているのですが、 その際に取得した値にリンクを付けて、再検索をする方法がわかりません。 POST変数で渡してやれば、というところはなんとなくわかるのですが、 具体的な方法をご教示いただきたいです。 どうかよろしくお願いいたします。 ------------------------------------------------------------------------ HTML側(データを検索・表示させるため)のtable.php <?php $nengetu = isset($_POST['nengetu']) ? $_POST['nengetu'] : ""; ?> HTML表示箇所 <?php <form method="post" action="tables.php"> <button type="submit" name="search">検索</button>←ボタンを押されたら表示 <thead>  <tr>   <th>年月</th>   <th>名前</th>   <th>金額</th>  </tr> </thead> <tbody> if(isset($_POST['search'])) $query.= "SELECT * FROM AAA"; if (!empty($nengetu)) { $query.=" WHERE nengetu = '$nengetu"; $dataview($query); ?> ------------------------------------------------------------------------ ------------------------------------------------------------------------ PDOで取得したテーブル内容を表示 class.table.php public function dataview($query) { クエリーを実行 ループ <tr> <td><?php print($row['name']); ?></td>←リンク付きで表示、table.phpで検索 <td><?php print($row['kingaku']); ?></td> <td><?php print($row['nengetu']); ?></td> </tr> } ------------------------------------------------------------------------

    • ベストアンサー
    • PHP
  • テーブルの情報が一部しか表示されません。(php)

    すべてのID分の提出状況を表示させたい("○"か"×")のですが、 id=1の提出状況しか表示されません。 >>CODE $recordSet2 = mysql_query('SELECT * FROM report'); <<CODE をwhileにいれてみたり試行錯誤してみたのですが、上手くいきません。 ご指摘よろしくお願い致します。 プログラム >>CODE <table width="70%"> <tr> <th scope="col"><bl>ID</bl></th> <th scope="col"><bl>教科名</bl></th> <th scope="col"><bl>課題名</bl></th> <th scope="col"><bl>担当教員</bl></th> <th scope="col"><bl>提出期限</bl></th> <th scope="col"><bl>再提出</bl></th> <th scope="col"><bl>再提出期限</bl></th> <th scope="col"><bl>提出状況</bl></th> </tr> <?php $recordSet = mysql_query('SELECT * FROM exercise ORDER BY id'); while ($table = mysql_fetch_assoc($recordSet)){ ?> <tr> <td><?php print(htmlspecialchars($table['id'])); ?></td> <td><?php print(htmlspecialchars($table['lessonname'])); ?></td> <td><?php print(htmlspecialchars($table['name'])); ?></td> <td><?php print(htmlspecialchars($table['teacher'])); ?></td> <td><?php print(htmlspecialchars($table['presentday'])); ?></td> <td><?php print(htmlspecialchars($table['represent'])); ?></td> <td><?php print(htmlspecialchars($table['representday'])); ?></td> <td><?php $recordSet2 = mysql_query('SELECT * FROM report'); $report = mysql_fetch_assoc($recordSet2); if ($table['lessonname'] == $report['lessonname'] && $table['name'] == $report['exercisename']) { if(eregi($member['name'], $report['upfile'])) { echo "○"; }else { echo "×"; } } ?></td> </tr> <?php } ?> </table> <<CODE

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • ゴム足の購入方法を教えてください。
  • パソコンのブーンという異音の対処法を教えてください。
  • 富士通FMVのデスクトップパソコンESPRIMO WF1/B3[FMVWB3F17D]についてのお悩みです。
回答を見る

専門家に質問してみよう