- 締切済み
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> よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
>わざわざゲッタ、セッタをかぶせなくても public 変数でよい。 ケースバイケースかと。 <?php class Idol extends Parson{ public function setage($age){ $this->age = $age - 2; //2歳どうしてもさば読みたい return $this; //ついでにメソッドチェーンもしたい。 } } ?> とか。 後で細かい修正かけられるし、メソッド一個かませておいたほうがいい場合もあるんじゃないですかね。 あと、 >function h($str, $type=ENT_COMPAT) { echo htmlentities($str, $type, 'Shift_JIS'); } function h($str, $type=ENT_COMPAT){ return htmlentities($str, $type, 'Shift_JIS');} として、直接echoするより値返してから、 <?php echo h($val)?> と呼んでやったほうがいい気がします。 ショートタグで書くときも <?=h($val)?> で呼べるし。 これはまぁ好みの問題ですけどね。
- yuu_x
- ベストアンサー率52% (106/202)
> XMLの開始タグと競合するから使わないほうが良い そうくると思った。 そもそも XML は 単体で成り立っているため、PHP で記述する機会はめったにない。 扱う必要がある場合は API を利用してやればいい。適切なインターフェースを利用してやれば、いい加減な XML を記述することもなくなる。 手書きで、なんてのは HTML 特有のことだ。 > スクリプトがサーバー変わった途端に動かなくなってしまった Apache なら、ある程度自由に設定を変更できるため、ほとんど困ることはない。 まぁ環境によるか。だからデフォルト On でいいと。
- bm_hiro
- ベストアンサー率51% (200/388)
>>3 本題とは関係ありませんし、いつも ここで、ナチュラルにズレた回答をしている俺がツッコむ事をご容赦ください。 気になったのは、ここ↓ >> # ショートタグはデフォルトで On でいいよ。php 連呼するほど php 好きでもないし。 ケースバイケースなので、なんとも言えないこともあるのですが、XMLの開始タグと競合するから使わないほうが良いよん。って意見もあります。 実際、俺もショートタグ派なのですが、今まで動いていたスクリプトがサーバー変わった途端に動かなくなってしまったことがあります。 動かないだけならいいもののソースをPHPとして認識してくれなくて、テキストとして表示して、かなり恥ずかしい目にあったことがあります。 なので、<?php ?>と ちゃんと書くようにしている今日この頃です。
- yuu_x
- ベストアンサー率52% (106/202)
これがいいとは言わないけど、ミスを減らすように書くのもまた必要というか。 <?php class Person { public $name, $age; // どうせセッタ作るなら、使いやすいほうがいいでしょ。 public function set($name, $age) { $this->name = $name; $this->age = $age; } } $pr1 = new Person; $pr2 = new Person; $pr1->set('佐藤', 34); $pr2->set('田中', 45); function h($str, $type=ENT_COMPAT) { echo htmlentities($str, $type, 'Shift_JIS'); } ?> <title></title> <table border=2> <tr bgcolor="aqua"> <th>名前</th> <th>年齢</th> </tr> <tr><td><?php h($pr1->name);?></td><td><?php h($pr1->age);?></td></tr> <tr><td><?php h($pr2->name);?></td><td><?php h($pr2->age);?></td></tr> </table> # 配列にしてしまいたい気分だ。 # 省略できるところを省略せずに、省略できないところを省略するとはまた酔狂な。 # ショートタグはデフォルトで On でいいよ。php 連呼するほど php 好きでもないし。
- NARH
- ベストアンサー率82% (88/107)
Parse error: syntax error, unexpected T_PRINT in /なんか/どっか/XXXX.php on line 34 こんな感じでエラーでません? # php.ini で display_errors = On していないと出ないかな。 34 行目付近のソースは 31: print $pr1->getage(); 32: print"</td></tr>" 33: 34: print"<tr><td>"; 35: print $pr2->getname(); 36: print "</td><td>"; 37: print $pr2->getage(); 38: print"</td></tr>" 39: 40: ?> 32行目のprint文に行末の ; がないので print"</td></tr>" print"<tr><td>"; のような命令はムリとPHPはおっしゃっております。 38行目にもないけど、40行目でスクリプトが終わっているので、暗黙的に print"</td></tr>"; が命令と解釈されています。#でもちゃんと書きましょう。 教えて!goo にかぎらず、仕事でも(仕事ならなおさら)、友人に聞くときでも「できません」ではなく、ちゃんと伝える努力をしましょう。 多分これくらいなら、聞くために必要な情報を準備している段階で気づけると思いますよ。 #オブジェクト思考で書いてみようぐらいのスキルはあるのですから、これくらいの問題解決能力はきっとあるのですよ。 #そしたら、かかなくてもいい恥をかく必要もないのですから。
- yuu_x
- ベストアンサー率52% (106/202)
何がうまくいかないのか分からないけど、とりあえず、わざわざゲッタ、セッタをかぶせなくても public 変数でよろい。 class Person{ public $name = "姓名"; public $age = 20; } $pr1 = new Preson; $pr1->name = '斉藤'; $pr1->age = 39; echo $pr1; クラスを使っているとプロパティを全て隠蔽してしまいたい気分に駆られるというか、いつの間にかそうしているときもある。 なぜそうしてしまうか。PHP の場合多態性が変に効いてくるんだよな。(要するに何でも突っ込めてしまう)から、いちいちチェックしたくなる。 使う側の自由を損なうくらいなら public で十分。 幸い PHP には ゲッタセッタが用意されているから、必要に応じて、(デバッグ時)など、ゲッタセッタをかませてやるのもいい。 PHP 開発者も言っているが、変数隠蔽なんざなくてもほとんど問題にならない。かえって窮屈なだけだ。(それより、多重継承ができないのは何とかならんかな) あぁ、セミコロン「;」が抜けている。いい加減入門書はもう少しましなものを掲載してほしい。パーツごとに分けず全てをまぜこぜにするからそんなくだらないミスが生まれる。