PHPについて質問です。 Add Star

PHPを勉強中なのですが、コード中の() {} "" ;の使い方
の決まりがいまいち理解できません。

文字は必ず ""で囲む、スペースは自由に入れて問題ない
というのはわかりました。

合ってますか?

書籍などをみても()や{}を使ったり使わなかったりするので、
どっちでもいいのでしょうか?
決まりごとや法則などあるのでしょうか?教えてください。

例えばif構文で
<?php
if (date("h")>=18)
{print"goodnight";}

elseif (date("h")>=11)
{print"hello";}

?>

とあるとしたら、("h")の()は必要なのか、{print"goodnight";}の
{}は必要なのか、{}が()に変わるとだめなのか、というようなこと
がわかりません。
回答よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2015/05/04 12:45:31
  • 終了:2015/05/06 10:27:59

ベストアンサー

id:TransFreeBSD No.2

TransFreeBSD回答回数668ベストアンサー獲得回数2682015/05/04 22:52:23

細かい例外などありますが、文法をざっくり書いてみると。

プログラムは文からなります。

文は概ね2種類に分ける事が出来ます。
・一つのセミコロン「;」で終わる単純な文(1行で書くことが多い)
・内部に文を含む文(複数行で書くことが多い)
改行するしないは自由なので、1行か複数行かは、そう書く場合が多いと言う程度です。
セミコロンも省略できる場合があるので必ずしもあるとは限りません。

後者はifとかwhileとかforとかの文です。if文、if構文とか呼びます。
「内部に文を含む文」とは、質問の例でいえば、全体が一つのif文で、
内部に、{print"goodnight";}、{print"hello";}という二つの文を含んでいるという意味です。

if文の基本形は「if (式) 文」です。例はelseifも使い、「if (式) 文 elseif (式) 文」の形となっています。
ここで「文」は一つの文です(式については後述)。
しかし、文が一つしか書けないと非常に不便(というより実用ではない)です。
そこで使われるのが、複数(一つでも可)の文を一つにまとめる文(これも「内部に文を含む文」)です。
それが「{}」になります。

例の場合、{}の中身は1つしか文がありませんので、{}を使わず書けます。

<?php
if (date("h")>=18)
    print"goodnight";
elseif (date("h")>=11)
    print"hello";
?>

しかし{}の中身が複数の文であれば次の様に書けますが

<?php
if (date("h")>=18)
  {
    print "goodnight";
    print "everyone";
  }
elseif (date("h")>=11)
    {print"hello";}
?>

次の様にはかけません。

<?php
if (date("h")>=18)
    print "goodnight";
    print "everyone";
elseif (date("h")>=11)
    print"hello";
?>

文は命令と式からなります。

命令は「print」や「echo」などです。
式は「date("h")>=18」や「"goodnight"」などです。

式は「1 + 2 * 3」の様に複数の式を組み合わせる事が出来ます。
「1 + 2 * 3」は「1 + (2 * 3)」の意味ですが、()は省略出来ます。
しかし、「(1 + 2) * 3」を「1 + 2 * 3」とは書けない様に省略できない場合があります。

「date("h")>=18」は「date("h")」と「18」を比較する式です。
「date("h")」は関数です。関数は「感数名(式)」の形をとります。()は省略出来ません。
「print」は命令なので()は必要ありませんが、関数のように「print("everyone")」とも書けます。

if文は「if (式) 文」の様に書きます。()は省略出来ません。
この様に()は色々な所で使われていますが、概ね中に式を書く構文などに使われています。

その他の{}や()

ユーザ定義関数やクラス定義で{}が使われます。
また、文字列中でも、なかで式を使うために()や{}を使うことがあります。
その他、構文に合わせ、違う意味で使われる事がありますので、詳細はリファレンスを参照してください。
http://php.net/manual/ja/langref.php

プログラミング言語はコンピュータのための言語であると同時に、自然言語と同じく人間が読むため、読ませるため、表現のための言語でもあります。
そのため、常用するものから滅多に使わないものまで様々な表現と文法があるので、最初はよく使われるものから覚えていけば良いでしょう。
あと、目的は言語を覚えることではなく、言語を使って表現することだと思いますので、そのためにも人のプログラムを読んでわかりやすい表現方法を学ぶと良いですよ。
それに合わせ、リファレンスを読んで少しずつ整理していけばよいと思います。

id:worldkagu

本当に分かりやすい回答ありがとうございます。
理解できました!
ありがとうございました!

2015/05/06 10:26:15

その他の回答(1件)

id:yoneto164 No.1

ヨネちゃん回答回数813ベストアンサー獲得回数942015/05/04 14:41:32

「"」は「'」でも動作することがあります。

文字列は必ず「""」で囲み、文字列中に「"」がある場合はクォートします。
半角スペースは自由に入れて問題ないですが、
半角スペースを消すと動かなくなる場合があります。

date("h") という使い方であれば date(h) でも同じ結果が得られます。
ただしこの場合は大文字の「H」を使うべきであると思います。
date("h時i分")という使い方をよくするからだと思います。

{print"goodnight";}の
{}は無くても動く場合がありますが、
次に「if」や「elseif」や「else」が出てくるまで、
「date("h")>=18」を実行し続けてしまいます。
「{」がないと「}」を入れられないので、
「if」から抜けられなくなるのです。
()ではエラーになります。

id:TransFreeBSD No.2

TransFreeBSD回答回数668ベストアンサー獲得回数2682015/05/04 22:52:23ここでベストアンサー

細かい例外などありますが、文法をざっくり書いてみると。

プログラムは文からなります。

文は概ね2種類に分ける事が出来ます。
・一つのセミコロン「;」で終わる単純な文(1行で書くことが多い)
・内部に文を含む文(複数行で書くことが多い)
改行するしないは自由なので、1行か複数行かは、そう書く場合が多いと言う程度です。
セミコロンも省略できる場合があるので必ずしもあるとは限りません。

後者はifとかwhileとかforとかの文です。if文、if構文とか呼びます。
「内部に文を含む文」とは、質問の例でいえば、全体が一つのif文で、
内部に、{print"goodnight";}、{print"hello";}という二つの文を含んでいるという意味です。

if文の基本形は「if (式) 文」です。例はelseifも使い、「if (式) 文 elseif (式) 文」の形となっています。
ここで「文」は一つの文です(式については後述)。
しかし、文が一つしか書けないと非常に不便(というより実用ではない)です。
そこで使われるのが、複数(一つでも可)の文を一つにまとめる文(これも「内部に文を含む文」)です。
それが「{}」になります。

例の場合、{}の中身は1つしか文がありませんので、{}を使わず書けます。

<?php
if (date("h")>=18)
    print"goodnight";
elseif (date("h")>=11)
    print"hello";
?>

しかし{}の中身が複数の文であれば次の様に書けますが

<?php
if (date("h")>=18)
  {
    print "goodnight";
    print "everyone";
  }
elseif (date("h")>=11)
    {print"hello";}
?>

次の様にはかけません。

<?php
if (date("h")>=18)
    print "goodnight";
    print "everyone";
elseif (date("h")>=11)
    print"hello";
?>

文は命令と式からなります。

命令は「print」や「echo」などです。
式は「date("h")>=18」や「"goodnight"」などです。

式は「1 + 2 * 3」の様に複数の式を組み合わせる事が出来ます。
「1 + 2 * 3」は「1 + (2 * 3)」の意味ですが、()は省略出来ます。
しかし、「(1 + 2) * 3」を「1 + 2 * 3」とは書けない様に省略できない場合があります。

「date("h")>=18」は「date("h")」と「18」を比較する式です。
「date("h")」は関数です。関数は「感数名(式)」の形をとります。()は省略出来ません。
「print」は命令なので()は必要ありませんが、関数のように「print("everyone")」とも書けます。

if文は「if (式) 文」の様に書きます。()は省略出来ません。
この様に()は色々な所で使われていますが、概ね中に式を書く構文などに使われています。

その他の{}や()

ユーザ定義関数やクラス定義で{}が使われます。
また、文字列中でも、なかで式を使うために()や{}を使うことがあります。
その他、構文に合わせ、違う意味で使われる事がありますので、詳細はリファレンスを参照してください。
http://php.net/manual/ja/langref.php

プログラミング言語はコンピュータのための言語であると同時に、自然言語と同じく人間が読むため、読ませるため、表現のための言語でもあります。
そのため、常用するものから滅多に使わないものまで様々な表現と文法があるので、最初はよく使われるものから覚えていけば良いでしょう。
あと、目的は言語を覚えることではなく、言語を使って表現することだと思いますので、そのためにも人のプログラムを読んでわかりやすい表現方法を学ぶと良いですよ。
それに合わせ、リファレンスを読んで少しずつ整理していけばよいと思います。

id:worldkagu

本当に分かりやすい回答ありがとうございます。
理解できました!
ありがとうございました!

2015/05/06 10:26:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません