php学習初心者です。require_once(に限らずですが)の書式について教えてください。ネットで検索すると、いかの3つの記述があります。


 require_once("Auth/Auth.php");
 require_once "Auth/Auth.php";
 require_once 'Auth/Auth.php';

どの記述で書くのが一番お勧めか、理由もできればよろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2011/05/14 21:52:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Banias No.1

回答回数237ベストアンサー獲得回数19

ポイント30pt

質問のリストにはありませんが、


require_once('Auth/Auth.php');


と書くことをお勧めします。


理由は下記の通り。

  1. require_onceは一種の関数なので、引数を (...) に入れた方がシックリくる。
  2. ダブルクォーテーションは置換処理をするので、純粋な文字列だけの場合はシングルクォーテーションで囲んだ方がバグや脆弱性の原因にならなくてすむ。
id:tomoko2

回答ありがとうございます。

require_once('Auth/Auth.php');という記述は、検索してもなぜかあまり出てこないんですよね。。

回答者様のアドバイスのとおり、

require_once('Auth/Auth.php');

をMyコーディング規約として採用したいと思います。

素朴な質問にご回答くださりありがとうございます。

2011/05/13 13:41:01
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント30pt

【1】かっこは必要不要?

phpの中枢に組み込まれていてphpの根幹を成す「言語構造」では基本的に(かっこ)は不要

追加機能である「関数」にはパラメータの有無にかかわらず形式として(かっこ)が必要となっています

require_onceは言語構造に含まれており、基本的には(かっこ)不要なものです

 

【2】シングルorダブル?

ダブルクォートで囲むと、変数やエスケープコードが入っていないかを検出する処理が必ず入るため、

変数やエスケープコードを含まないのであれば、単純に受け渡すだけのシングルクォートのほうが無駄なく処理が進みます

 

【3】結局は?

状況に応じて選択

通常 require_once 'Auth/Auth.php';

変数などを含む場合 require_once "{$hoge}/Auth.php";

式を含む場合 require_once require_once(dirname(__FILE__) . "/Auth.php");

id:tomoko2

詳しいご回答ありがとうございます。

学習中の身としては、「言語構造に含まれる」か「関数」かを意識したいですね。

で、

【3】でご教示いただきました内容に納得です。

ありがとうございます。

2011/05/13 15:01:04
id:a-kuma3 No.3

回答回数4974ベストアンサー獲得回数2154

ポイント30pt

三つ、というか、以下の組合せの四つです。

  • 引数に括弧を付けるか、省略するか

  • 文字列をダブルクォートでくくるか、シングルクォートにするか


まず、括弧については、省略しない方が良いでしょう。

引数が長くなったり、複数ついたときに、関数の終わりが「ここ」と分かる方が、多少なりともソースが見やすくなります。

ソースを見やすくすることで、引数の指定を間違う可能性が、少しでも減ります。


ダブルクォートかシングルクォートかは、どちらがお勧め、というのではなく、機能的に違いがあります。

固定の文字であれば、どちらでも構わないんですが、ダブルクォートの場合には、変数を内部に展開してくれます。

$file = 'Auth.php';

require_once("Auth/${file}");

文字列の一部が変わるときに使えます。

文字列の結合でも同じなんですが、場合によって、見やすさで使い分ければ良いと思います。

$file = 'Auth.php';

require_once('Auth/' . $file);

機能的にシンプルなシングルクォートの方が、処理が早いのか、という勘ぐりもあるかと思いますが、

よほどのことが無い限り、顕著な差は出てきません。

お手軽なのが php の良いところだと思うので、「後で変数展開をするかもしれないから、ダブルクォートにしておこうか」程度の認識で構わないと思います。

id:tomoko2

ご回答ありがとうございます。

ソースの可読性や、後の変更のしやすさも考えてのコーディングですよね。

細かな点ですが、決めておくと全体がピシッとするものだと思うので。

ご回答者様それぞれのコーディング哲学がお伺いできて大変興味深いです。

私はどうしようか、ちょっと迷ってきました。

よく考えてみようと思います。

ご教示ありがとうございます。

2011/05/13 15:12:24
  • id:windofjuly
    うぃんど 2011/05/13 13:43:24
    >require_onceは一種の関数

    require_onceは関数ではなく言語構造(正確には制御構造)ですから理由からして間違っている
    この人は、いいかげんな回答の割合が高い人なので注意が必要です
    黙ってましたが、さすがにいいかげんにしろと言いたくなりました
  • id:windofjuly
    うぃんど 2011/05/13 15:35:44
    >私はどうしようか、ちょっと迷ってきました

    それぞれの持つ本来の意味を理解した上でならば、a-kuma3さんが最後に書いておられるように、
    「後で変数展開をするかもしれないから、ダブルクォートにしておこうか」としても、
    後々問題になることも無いでしょうし、実際にそのようにしているから下記の記述が多かったりします
    require_once("Auth/Auth.php");

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

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

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

回答リクエストを送信したユーザーはいません