• 締切済み

PHPにおいて変数の初期化

PHPで変数を初期化する際の初期化の方法について質問です。 私はPHPで変数を初期化するさい、視認しやすい様にsettype関数を用いることが おおいです。 単純に $hoge = array(); $foo = ""; $hoo = 1; とするより settype($hoge,"array"); とした方が、明確に 「ああ。この変数はこの行数で初めてでてきたんだな」 という具合に判断できるとおもっているからです。 例えばJSだと var hoge; という具合に、変数そのものの宣言を先んじておこなえますよね。 このように明確な変数宣言がわかりやすいとおもうのですが・・・・。 みなさまがたはPHPではどのように変数を初期化しますか? ご意見おきかせください。

みんなの回答

noname#244856
noname#244856
回答No.5

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

noname#244856
noname#244856
回答No.4

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-Single-Quotes-Performance-Myth.html

1000vicki
質問者

お礼

ベンチマークの詳細は、英語なので性格に把握していませんが、 ほぼ差がないといってもよいのかもしれませんね。 というよりも シングルやダブルだの違いをこだわるほど、処理速度にこだわるなら まさにjavaやASP(C#)でとかっていう話にもなりそうです。 実際、業務で使うコードは私の場合ほぼほぼダブルクォーテーションで統一しています。 文字列リテラルだけのときはシングル。変数展開するときはダブルなどが 混在するのは個人的にみにくくなるようなきがします。

  • oooioi
  • ベストアンサー率29% (16/55)
回答No.3

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

まぁ私はあまり使いませんがセッタ=ゲッタで処理する手もあるでしょう また体裁だけの話であれば(属性)で初期値設定をすれば見やすくなります <?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);

1000vicki
質問者

お礼

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

noname#244856
noname#244856
回答No.1

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宣言 | こういうイメージじゃないですかね。

1000vicki
質問者

お礼

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

関連するQ&A