アレルギー対策、自宅でできる効果的な方法とは?

私は頭が錆びないようにPHPプログラムを勉強しています。
以下のプログラムはPHP参考書の通りに入力しました。
 しかし!<?php~?>の順番を変えてもプログラムは動きます。
そこで、もしあなたが第三者に以下のプログラムの流れを説明しようとした場合
主観でもいいのですが、最初にどんなプログラムを持ってきますか?
 よろしくお願いします。
<!DOCTYPE html>
<html>
<head>
<title>P262 Sample8-4 コンストラクタとクラスの変数</title>
</head>
<body>

<?php

$pr1 = new Person("鈴木",56);
$pr2 = new Person("佐藤",38);
?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>名前</th>
<th>年齢</th>
</tr>

<?php

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

print "<hr>";
print "合計人数:";
print Person::$count;

?>

<?php

class Person
{

public static $count = 0;

public function __construct($nm,$ag)

{
person::$count++;


$this->name = $nm;
if($ag>=20 && $ag<=60){
$this->age = $ag;
}
else
$this->age = -1;
}
public function getname(){return $this->name;}
public function getage(){return $this->age;}
}

?>

</body>
</html>

質問者からの補足コメント

  • うれしい

    そうですね^^
    1)最初にクラスを宣言
    2)この章の趣旨であるstatic最初に持ってきた後に「::」があるのでわかりやすいです。
      参考書だと::の後にstaticがあり素人には、わかりにくかったです。
    3)それから、 __construct($nm,$ag)で引数を宣言することでわかりやすいです。
    4)それから、決まりに従った手続きに入る。
     非常にわかりやすいです。

      補足日時:2017/05/17 07:02

A 回答 (2件)

できればクラスの宣言は上部にもっていくか、別ファイルにわけてincludeします


あとは表示部分はひとまとめにしたほうがいいでしょう

<?php
class Person
{
public static $count = 0;
public function __construct($nm,$ag){
person::$count++;
$this->name = $nm;
if($ag>=20 && $ag<=60){
$this->age = $ag;
}
else
$this->age = -1;
}
public function getname(){
return $this->name;
}
public function getage(){
return $this->age;
}
}


$pr1 = new Person("鈴木",56);
$pr2 = new Person("佐藤",38);


$table=<<<eof
<tr>
<td>{$pr1->getname()}</td>
<td>{$pr1->getage()}</td></tr>
<tr>
<td>{$pr2->getname()}</td>
<td>{$pr2->getage()}</td>
</tr>
eof;

$goukei=<<<eof
<hr>
合計人数:
eof;
$goukei.=Person::$count;

print <<<eof
<!DOCTYPE html>
<html>
<head>
<title>P262 Sample8-4 コンストラクタとクラスの変数</title>
</head>
<body>
<table border="2">
<tr bgcolor="#AAAAAA">
<th>名前</th>
<th>年齢</th>
</tr>
{$table}
</table>
{$goukei}
</body>
</html>
eof;
?>
    • good
    • 2
この回答へのお礼

ご回答くださいましてありがとうございました。
 私にとりましてハイレベルのプログラムです。
「こんなやり方もあるのか」と勉強になります。
今から解読してみます。

お礼日時:2017/05/17 06:44

webプログラムの肝はプログラムとデザインをわけることです。


HTMLの表示はデザイナーさんが適宜調整をしてくれるものなので
プログラマは動的な部分をいかに効率よく渡してやるかだけ考えればいいでしょう
(もちろん一人で兼務する場合にも、問題を切り分けるのに有効です)

$tableと$goukeiをあえてわけているのは、その後のメインのHTMLが
スタティックなテンプレートになっていて、動的な部分を変数で渡すためです。
次のステップでajaxなど非同期処理が入ってきた場合にも切り分けが楽になります
    • good
    • 2
この回答へのお礼

再度ご回答くださいましてありがとうございました。
Aンス:webプログラムの肝はプログラムとデザインをわけること
なるほどですね^^
参考書は、分けていなかったので、PHPだけの機能を勉強するにあたり、わかりずらかったのですね、きっと

お礼日時:2017/05/18 07:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qプログラムの改良

人の作ったプログラムを改良することになりました。
Visual C++ は初めてですが、CやC++は一通り勉強しています。

そこで、いろいろ調べているのですが、
例えば
「MFCは使わずに,Win32API SDKを用いた方法」
などという説明があります。

自分が対応しているプログラムが、そのどちらであるか、あるいはほかの方法で作られているか
というのはどうしたら分かるのでしょうか?

Aベストアンサー

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが対応するプログラムが
きちんとWin32のみで、もしくはMFCのみで書かれているとは限らないですからね
適当に作られて、両方が混在している可能性だってありますし

Q3.そこからですか
そこは調べればすぐ出てくるかと思いますが
MFCというのはWin32をラッピングしたものです

Q4.作った本人に聞く
仕様書とかがあるならそれを見る

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが...続きを読む

QCのプログラムに無性にイライラするのはおかしいですか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  hn[ p[0] ]++;
 }
}

3重にするならせめて、y,x,i の順にしてp[0]への代入は1回で済ませればと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  for( i=0; i<256; i++){
     if(p[0]==i){hn[i]++;}
  }
 }
}

最近のコンパイラの最適化では、私の書いたようなコーディング(修正?)は無意味なのでしょうか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++)...続きを読む

Aベストアンサー

利点を考えてみました


これを並列処理したときに
スレッド0: hn[0] に p[0] = 0 をカウント
スレッド1: hn[1] に p[0] = 1 をカウント
...
とすれば、
・img -> imageData は読み出すだけなので衝突しない
・hn[i] でアクセスする領域は、スレッド毎に i が違うので、同じ箇所に書き込まれることはない。
となり、排他処理が不要となります。
(もちろん、x,y,i,p[0]はスレッドでローカルな変数とします)

ただ、並列処理のオーバーヘッドや同時並列処理数等を考えると、こんな並列処理はしない方が効率的です。


あるいは、hn[]がシークに時間がかかる領域の場合、
hn[p[0]) で毎回違う位置を探しに行って、その時間が無視できないほどだったら、
先にhnを決めてしまった方が速くなるでしょう。

こちらも、非現実的です。

QC言語の問題です

こちらまだC言語を勉強したてであまり知識がありません。どなたかお力をお貸しください。

全部で8名から代表者を3名を無作為に選びたい。一様乱数を0から7の間で発生させる。それを100回試行して最も回数の多い順に並べ替えを行って表示した例である。下のような結果を得るプログラムを作成せよ。

第1位 16回 Eさん
第2位 15回 Dさん
第3位 15回 Cさん
第4位 14回 Bさん
第5位 13回 Gさん
第6位 11回 Hさん
第7位 8回 Aさん
第8位 8回 Fさん


#include<stdio.h>
#include<math.h>
#include<string.h>
main(){
int i,j,n,count[8];
unsigned char x;
int w;
char *work;
char *name[8]={"Aさん","Bさん","Cさん","Dさん","Eさん","Fさん","Gさん","Hさん"};

// srand(time(NULL));
for(n=0;n<8;n++){
count[n]=0;
}
for(i=1;i<=100;i++){
x=rand()%8;
count[x]++;
}

for(i=0;i<7;i++){
for(j=i+1;j<8;j++){
ifj]){
work=count[i];
count[i]=count[j];
count[j]=work;
}
}
}

for(i=0;i<8;i++){
printf("第%d位 %3d回 %10s\n",i+1,count[i],name[i]);
}
}

第〜位、〜回はちゃんと表示されるのですが、最後の〜さんがAーHまで順番になってしまいます。
助けてください。よろしくおねがいします。

こちらまだC言語を勉強したてであまり知識がありません。どなたかお力をお貸しください。

全部で8名から代表者を3名を無作為に選びたい。一様乱数を0から7の間で発生させる。それを100回試行して最も回数の多い順に並べ替えを行って表示した例である。下のような結果を得るプログラムを作成せよ。

第1位 16回 Eさん
第2位 15回 Dさん
第3位 15回 Cさん
第4位 14回 Bさん
第5位 13回 Gさん
第6位 11回 Hさん
第7位 8回 Aさん
第8位 8回 Fさん...続きを読む

Aベストアンサー

変数nameの内容を全然操作していません。初期値のままなので、、、

> 最後の〜さんがAーHまで順番になってしまいます。

となるのは当然かと。(^^;
nameをどのように扱えばよいか、countとnameをどのようなデータ構造としたら処理効率がよいかを考えられるとよいです。

で、そういったことは使用するプログラミング言語に完全には依存しない部分かと思います。
例えば名前と回数がペアになったような(論理的な)データ構造を考え、処理手順を日本語で(1), (2), (3), ... とかいった箇条書きで設計されるとよいでしょう。
フローチャートなどのチャート図をご存知でしたらそれで書くのが楽で効率的でしょう。

参考まで。

Qc言語のプログラミングの問題で50以下の正の偶数を降順(大きい順)で表示するプログラムを作成できる方

c言語のプログラミングの問題で50以下の正の偶数を降順(大きい順)で表示するプログラムを作成できる方お願いします

Aベストアンサー

No3の方から既に回答がでていますが、別解です。
#include <stdio.h>

int main()
{
printf("50\n");
printf("48\n");
printf("46\n");
printf("44\n");
printf("42\n");
printf("40\n");
printf("38\n");
printf("36\n");
printf("34\n");
printf("32\n");
printf("30\n");
printf("28\n");
printf("26\n");
printf("24\n");
printf("22\n");
printf("20\n");
printf("18\n");
printf("16\n");
printf("14\n");
printf("12\n");
printf("10\n");
printf("8\n");
printf("6\n");
printf("4\n");
printf("2\n");
return 0;
}

以下、実行結果です。
------------------------------------
50
48
46
44
42
40
38
36
34
32
30
28
26
24
22
20
18
16
14
12
10
8
6
4
2

No3の方から既に回答がでていますが、別解です。
#include <stdio.h>

int main()
{
printf("50\n");
printf("48\n");
printf("46\n");
printf("44\n");
printf("42\n");
printf("40\n");
printf("38\n");
printf("36\n");
printf("34\n");
printf("32\n");
printf("30\n");
printf("28\n");
printf("26\n");
printf("24\n");
printf("22\n");
printf("20\n");
printf("18\n");
printf("16\n");
printf("14\n");
printf("12\n");
printf("10\n");
printf("8\n");
printf("6\n");
printf("...続きを読む

QC++を学ぶためにCの知識は必須ですか?

将来の就職と個人的興味のため、C++を勉強しようと思ったんですが(C++にはオブヘクト志向があるため)ネットでいろいろ調べていると「Cが基盤になっているためCから勉強を始めたほうがいい」とありました。
正確にはどこまでの知識と経験が必要ですか?
そもそもC++を学ぶためにCの知識は必須ですか?

Aベストアンサー

まあ、Cの言語仕様を一通り軽くやっといた方が良いかも。
ポインター、配列、構造体、整数演算、型の表記の仕方とかは
結構癖があるから、事前に知っといた方が良いでしょう。

Cの言語仕様ってC++に比べて驚くほど小さいので
そんなに時間はかからないと思う。
最初からクラスも大変だし、最初はベターCから
始めるのも良いのでは。

しかし就職にC++が役立つかというと、確かに
c++使いまくりのシステムもあるが
Javaの方が圧倒的に有利というのは
覚えておいた方が良いでしょう。

Qプログラミング

プログラミングを学びたいんですが最初にある程度プログラミングができるようになってからアルゴリズム論を学ぶ方がいいですか?それとも最初にアルゴリズム論を学んだ方がいいですか?

Aベストアンサー

何の言語か知りませんが、最初に、アルゴリズムなどに手をつけたら、闇の中だと思いますね。よく、構文と勘違いしている人がいますね。

アルゴリズムの定義をどういうように解釈しているのか分かりませんが、アルゴリズムはコンピュータやプログラミング言語に依存しません。一般的な定義は「問題を解くための論理または手順」のこと。また、コンピュータのプログラミング向きでもないものも存在します。

一度は、丁寧に勉強しましたが、私は、ほとんどアルゴリズムは分かっていません。たぶん、古典的なものは、コンピュータのない時代に数学の天才が作ったものだと思いますが、囲碁や将棋の定石のような解釈しかしていません。VBAなどでは、アルゴリズムを使った人など、年に一度、現れるかどうかですね。理由は、.NetFrameWork などの関数に、すでに包合されているからです。

ここのサイトの下に代表的なアルゴリズムの名称が出ています。

http://e-words.jp/w/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0.html

何の言語か知りませんが、最初に、アルゴリズムなどに手をつけたら、闇の中だと思いますね。よく、構文と勘違いしている人がいますね。

アルゴリズムの定義をどういうように解釈しているのか分かりませんが、アルゴリズムはコンピュータやプログラミング言語に依存しません。一般的な定義は「問題を解くための論理または手順」のこと。また、コンピュータのプログラミング向きでもないものも存在します。

一度は、丁寧に勉強しましたが、私は、ほとんどアルゴリズムは分かっていません。たぶん、古典的なものは...続きを読む

Qプログラムを覚えるのに、練習問題のコードを、チラシの裏に手書きで書いて覚えようとしているのですが、キ

プログラムを覚えるのに、練習問題のコードを、チラシの裏に手書きで書いて覚えようとしているのですが、キーボードで打って覚えた方が良いでしょうか?

Aベストアンサー

個人的すぎる感想ですが、紙に書いても良いと思います。

 同じ紙に書くならばフローチャートも併せてどうぞ。

Qメッセージの頭に「#」の意味教えてください

メッセージの頭に「#」の意味教えてください

Aベストアンサー

言語にもよりますがコメント文に利用されることが多いですね
ただC系ではありません

Qc言語のプログラミングの問題でキーボードからアルファベット大文字を入力すると、Aから入力した文字まで

c言語のプログラミングの問題でキーボードからアルファベット大文字を入力すると、Aから入力した文字までのアルファベットを順番に表示するプログラムを作成できる方お願いします

Aベストアンサー

こういうのも
#include <stdio.h>

int main()
{
char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i = 0;
int c;

c = getchar();
do
{
printf("%c", table[i]);
} while(table[i++] != c);

return 0;
}

文字コードが非連続でも大丈夫バージョン。

Qエディタ って?

テキストエディタ という言葉が使われましたが、何を表しているのでしょうか?

Aベストアンサー

ワープロの簡易版みたいな感じで、ほぼWindows のメモ帳のようなものです。文字サイズ、罫線とか図名を操作するような機能はありません。テキストのみを編集(エデット)するソフトです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報