人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: YumiMars
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●25ポイント

【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/

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


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


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

2 ● tezcello
●25ポイント

【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

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

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


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

3 ● a-kuma3
●50ポイント ベストアンサー

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) なんて書くと、「分かってねえなあ」って、即座に突っ込まれたものです :-)


うぃんどさんのコメント
include は制御構造なのですが、 カッコの有無を論じたいなら言語構造かどうかってところがミソですよ。 http://php.net/manual/ja/function.include.php >> include は特別な言語構造であるため、 引数の前後に括弧は不要です。 返り値を比較する際には注意してください。 << 「特別な」ってところが誤解を生みそうな気がしなくもないですが、 a-kuma3さんだから原文書いておけばOKかな? http://php.net/manual/en/function.include.php >> Because include is a special language construct, parentheses are not needed around its argument. Take care when comparing return value. << こちらの記事も参考になるかと…。 http://d.hatena.ne.jp/hnw/20090509

a-kuma3さんのコメント
>> include は制御構造なのですが、 カッコの有無を論じたいなら言語構造かどうかってところがミソですよ。 << 構文として、 >> include 式 << なのか、 >> include 文字リテラル << なのかで、解釈が変わってくるからなあ、と。 [http://www.php.net/manual/en/control-structures.if.php:title=マニュアルの if のところ]には、 >|| if (expr) statement ||< って、明示されてます。 ん、マニュアルの URL を見ると、if は、<span style="color: red;">control-structures</span>.if.php で、include は <span style="color: red;">function</span>.include.php ってなってる。 関数なの? >PHP の include

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

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ