重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

PHPで変数を初期化する際の初期化の方法について質問です。

私はPHPで変数を初期化するさい、視認しやすい様にsettype関数を用いることが
おおいです。
単純に
$hoge = array();
$foo = "";
$hoo = 1;
とするより
settype($hoge,"array");
とした方が、明確に
「ああ。この変数はこの行数で初めてでてきたんだな」
という具合に判断できるとおもっているからです。

例えばJSだと var hoge;
という具合に、変数そのものの宣言を先んじておこなえますよね。
このように明確な変数宣言がわかりやすいとおもうのですが・・・・。
みなさまがたはPHPではどのように変数を初期化しますか?

ご意見おきかせください。

A 回答 (5件)

私はなんとなく「文字列リテラルだけのときはシングル。

変数展開するときはダブル」というように使い分けていますが、確かにこれは意見が分かれるところではあると思います。ダブルクオート中であればエスケープシーケンスが増えることも加味しなくてはならないので、どちらにもメリット・デメリットはあります。結局のところ、一人我流で日曜大工プログラミングをする場合はその人のサジ加減に依存しますが、フレームワーク等で定められている場合はコーディング規約に従い、特にない場合も開発チームで統一したほうがいいかもしれませんね。
    • good
    • 0

The Single Quotes Performance Myth thus is just a big lie: Single quotes are neither faster at runtime nor at compile time.


http://nikic.github.io/2012/01/09/Disproving-the …
    • good
    • 0
この回答へのお礼

ベンチマークの詳細は、英語なので性格に把握していませんが、
ほぼ差がないといってもよいのかもしれませんね。

というよりも
シングルやダブルだの違いをこだわるほど、処理速度にこだわるなら
まさにjavaやASP(C#)でとかっていう話にもなりそうです。

実際、業務で使うコードは私の場合ほぼほぼダブルクォーテーションで統一しています。
文字列リテラルだけのときはシングル。変数展開するときはダブルなどが
混在するのは個人的にみにくくなるようなきがします。

お礼日時:2013/10/02 21:26

まず、


>$foo = "";
この程度の処理では差は出ないだろうが
基本的にダブルクォーテーションよりシングルクォーテーションの方が早いと言われている。
(フレームワークのコーディング規約として変数を展開する場合以外は
シングルクォーテーションを使うことを推奨していることがよくある。)
    • good
    • 0

まぁ私はあまり使いませんがセッタ=ゲッタで処理する手もあるでしょう


また体裁だけの話であれば(属性)で初期値設定をすれば見やすくなります

<?PHP

$a=(int) 0;
var_dump($a);
$b=(double) 1;
var_dump($b);
$c=(string) "2";
var_dump($c);
$d=(array) null;
var_dump($d);
    • good
    • 0
この回答へのお礼

あーキャストで明示的に型変換を書くのも一つの手っっぽいですね。
settypeとくらべても記述量はすくないですし。

お礼日時:2013/10/02 21:27

settypeはマイナーな関数だと思っていましたが・・・なるほど、確かに一理ありますね。

個人的には、この関数の第2引数が「VT_ARRAY」(VT=VarType)のような定数で渡せるならば結構気に入ってたかもしれませんが、文字列で渡すのがちょっと気持ち悪いですね。gettype関数の対になる関数なので仕方ないのかもしれませんが。

結局今のところは

$hoge = array();
$foo = "";
$hoo = 1;

で落ち着きそうです。PHP5.4以降のみを視野に入れるなら

$hoge = [];

になります。

JavaScriptとの比較についてですが・・・

下記の「高度な説明」をご覧ください。
http://www.red.oit-net.jp/tatsuya/java/aisatu.htm

JavaScriptにおけるvar宣言は変数の初期化というよりも、「グローバル変数として使うかどうか」を決定する要素としての意味合いの方が強いんじゃないかと思います。PHPの場合グローバル化するには「global」キーワードを使いますね。

          | JavaScript |   PHP  
---------------------------------
グローバル変数 |        | global宣言
  通常変数   |  var宣言 |

こういうイメージじゃないですかね。
    • good
    • 0
この回答へのお礼

確かに、型名を文字列でわたすところは
なんだかなー・・、っていう感じではありますね。

peclで厳格な型付けをおこなえるSPL_TYpe?だったか、そのような
エクステンションがありましたが、環境によっては使えないし、
ヴァージョンもまだ0.2とかの段階だったので結果settype関数におちついてたっていう
ところなんですよね。

お礼日時:2013/10/02 21:30

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