phpのincludeの記述について教えて下さい。

【1】
<?php include 'header.php' ?>
文末のセミコロンが有りませんが、このソースは問題無く動いています。正常にwebサイトの共通headerがincludeされています。phpの構文チェックサイトの判定でもエラーは出ませんでした。正常に動作しているのはなぜでしょう?そもそも間違っていない、のでしょうか?(セミコロンが無い、なんていうのは、プログラムが動かない原因の第一要因になりそうな気がするのですが・・・)


【2】
<?php include('header.php');?>
という書き方を見たことがあります。正しい書き方は、PHP Manualに有るように、
<?php include 'header.php';?>
と書けば良いと思うのですが、これらの違いは何でしょうか?前者の書き方は何か意図が有るのでしょうか?


【3】
includeの引数にファイル名を指定する場合、ダブルクォートとシングルクォートでは、本来はどちらが正しいのでしょうか?


どうぞよろしくお願い致しますm(_ _)m

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2013/10/16 09:39:56
  • 終了:2013/10/17 16:35:21

ベストアンサー

id:a-kuma3 No.3

a-kuma3回答回数4624ベストアンサー獲得回数19592013/10/16 13:53:39

ポイント50pt

include は、関数ではなく制御構造で、マニュアルにもきちんと書かれていませんが、以下のような構文です。

include 式

つまり、'header.php' も ('header.php') も、式の値としては 'header.php' なので、どちらも同じように動作します。
次のも同じこと。

include 'header' + '.php';


同マニュアルでは、例4が include に指定するファイル名が式として解釈されることに触れています。

<?php
// 正しく動作しない。「include(('vars.php') == 'OK')」、すなわち、「include('')」と評価される
if (include('vars.php') == 'OK') {
    echo 'OK';
}

// 正しく動作する
if ((include 'vars.php') == 'OK') {
    echo 'OK';
}
?>

http://php.net/manual/ja/function.include.php#example-141

# コメントの日本語訳だけしてます


昔から、この手の思い違いは、たくさんあります。
有名なところで言うと、C言語の return 文。

return 0;

return(0);

どちらも正しく動作します。式 (0) の値は、0 なので。
return(0) なんて書くと、「分かってねえなあ」って、即座に突っ込まれたものです :-)

他2件のコメントを見る
id:windofjuly

>関数なの?

制御構造に分類されているけど、
関数に似た動作をしていたりする特別な言語構造という言葉に返ります^^

2013/10/16 17:57:50
id:AQUARROWS

質問者です。私の持っているphp入門書にはincludeについて一文しか書かれていないので、回答を面白く読ませて頂きました。ありがとうございました。
動かない時は、phpマニュアルも参考にしますが、まだ難しくて理解出来ない部分も有る状況です。

2013/10/17 16:53:33

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982013/10/16 09:52:11

ポイント25pt

【1】
http://readygo.s8.xrea.com/php/php_doc01.php

複数の命令を書く時は1つの命令の区切りとして文の最後にセミコロン”;”をつけます。


ひとつしかなければ、セミコロンはいりません。

【2】
http://php-beginner.com/reference/loadfile/include.html

カッコのありなしは、どちらでも 判断できるように作られているぐらいしか言えないかと思います。

【3】
http://www.tryphp.net/2011/10/10/phpref-moziretsuatsukai/

●文字列は「"(ダブルクォート)」か「'(シングルクォート)」で囲む
●「"(ダブルクォート)」は変数展開される
●「"(ダブルクォート)」と「'(シングルクォート)」では
 扱うエスケープ文字列が違う


変数にセットするような時は、ダブル。
しないときは シングル みたいな感じかな。

id:AQUARROWS

迅速な回答をありがとうございます。わかり易い参考リンクでした。

2013/10/17 16:39:54
id:tezcello No.2

tezcello回答回数460ベストアンサー獲得回数692013/10/16 12:21:08

ポイント25pt

【1】
命令文の『区切り』にセミコロンが必要。
http://www.php.net/manual/ja/language.basic-syntax.instruction-separation.php

「PHP コードブロックの終了タグには自動的にセミコロンが含まれていると 認識されます」ともあったけど、これは知らなかった。


【2】
単純な間違いかと。
前者に特に意図がある訳ではなく、間違って覚えているか、他所のページを丸写ししただけなのでしょう。
http://www.php.net/manual/ja/function.include.php
「例4 インクルードの戻り値を比較する」のすぐ上


【3】
単引用符( ' )と二重引用符( " )との意味の違いはマニュアルを。
http://www.php.net/manual/ja/language.types.string.php

どちらが正しいという訳ではなく、最終的に予定している文字列を表現できていればどちらを使っても全く問題は無いでしょう。

この手のものは「後から見直した時にわかり易い」方が良いだろうとは思いますが、わかり易さに絶対的な基準がある訳も無い(個人個人の主観の問題)ので。
例えば、僕はできるだけ単引用符を使い、変数は連結する方向でやります。
(速度云々ではなく、単に読みやすいと思うから)

id:AQUARROWS

ありがとうございます。
>できるだけ単引用符を使い、変数は連結する方向でやります
具体例が参考になりました。

2013/10/17 16:42:23
id:a-kuma3 No.3

a-kuma3回答回数4624ベストアンサー獲得回数19592013/10/16 13:53:39ここでベストアンサー

ポイント50pt

include は、関数ではなく制御構造で、マニュアルにもきちんと書かれていませんが、以下のような構文です。

include 式

つまり、'header.php' も ('header.php') も、式の値としては 'header.php' なので、どちらも同じように動作します。
次のも同じこと。

include 'header' + '.php';


同マニュアルでは、例4が include に指定するファイル名が式として解釈されることに触れています。

<?php
// 正しく動作しない。「include(('vars.php') == 'OK')」、すなわち、「include('')」と評価される
if (include('vars.php') == 'OK') {
    echo 'OK';
}

// 正しく動作する
if ((include 'vars.php') == 'OK') {
    echo 'OK';
}
?>

http://php.net/manual/ja/function.include.php#example-141

# コメントの日本語訳だけしてます


昔から、この手の思い違いは、たくさんあります。
有名なところで言うと、C言語の return 文。

return 0;

return(0);

どちらも正しく動作します。式 (0) の値は、0 なので。
return(0) なんて書くと、「分かってねえなあ」って、即座に突っ込まれたものです :-)

他2件のコメントを見る
id:windofjuly

>関数なの?

制御構造に分類されているけど、
関数に似た動作をしていたりする特別な言語構造という言葉に返ります^^

2013/10/16 17:57:50
id:AQUARROWS

質問者です。私の持っているphp入門書にはincludeについて一文しか書かれていないので、回答を面白く読ませて頂きました。ありがとうございました。
動かない時は、phpマニュアルも参考にしますが、まだ難しくて理解出来ない部分も有る状況です。

2013/10/17 16:53:33

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

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

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

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

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