
PHPで変数を初期化する際の初期化の方法について質問です。
私はPHPで変数を初期化するさい、視認しやすい様にsettype関数を用いることが
おおいです。
単純に
$hoge = array();
$foo = "";
$hoo = 1;
とするより
settype($hoge,"array");
とした方が、明確に
「ああ。この変数はこの行数で初めてでてきたんだな」
という具合に判断できるとおもっているからです。
例えばJSだと var hoge;
という具合に、変数そのものの宣言を先んじておこなえますよね。
このように明確な変数宣言がわかりやすいとおもうのですが・・・・。
みなさまがたはPHPではどのように変数を初期化しますか?
ご意見おきかせください。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
私はなんとなく「文字列リテラルだけのときはシングル。
変数展開するときはダブル」というように使い分けていますが、確かにこれは意見が分かれるところではあると思います。ダブルクオート中であればエスケープシーケンスが増えることも加味しなくてはならないので、どちらにもメリット・デメリットはあります。結局のところ、一人我流で日曜大工プログラミングをする場合はその人のサジ加減に依存しますが、フレームワーク等で定められている場合はコーディング規約に従い、特にない場合も開発チームで統一したほうがいいかもしれませんね。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 …
ベンチマークの詳細は、英語なので性格に把握していませんが、
ほぼ差がないといってもよいのかもしれませんね。
というよりも
シングルやダブルだの違いをこだわるほど、処理速度にこだわるなら
まさにjavaやASP(C#)でとかっていう話にもなりそうです。
実際、業務で使うコードは私の場合ほぼほぼダブルクォーテーションで統一しています。
文字列リテラルだけのときはシングル。変数展開するときはダブルなどが
混在するのは個人的にみにくくなるようなきがします。
No.3
- 回答日時:
まず、
>$foo = "";
この程度の処理では差は出ないだろうが
基本的にダブルクォーテーションよりシングルクォーテーションの方が早いと言われている。
(フレームワークのコーディング規約として変数を展開する場合以外は
シングルクォーテーションを使うことを推奨していることがよくある。)
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);
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宣言 |
こういうイメージじゃないですかね。
確かに、型名を文字列でわたすところは
なんだかなー・・、っていう感じではありますね。
peclで厳格な型付けをおこなえるSPL_TYpe?だったか、そのような
エクステンションがありましたが、環境によっては使えないし、
ヴァージョンもまだ0.2とかの段階だったので結果settype関数におちついてたっていう
ところなんですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETからVBAマクロ(引数)を呼...
-
どういうプログラムを関数化を...
-
PHPの名前空間インポートについて
-
エラーの理由が分りません。Pri...
-
[CakePHP] Paginatorのリンクが変
-
可変変数にアロー演算子を使いたい
-
VBA コレクションに2次元配列...
-
try~catch
-
PHPでの画像の形式の変換
-
classの再定義エラーについて
-
WordでExcelデータを差込...
-
Dosブロンプトでtabを出力したい
-
「取得先」という表現について
-
wordの差し込み印刷で文字...
-
バッチファイルでpingの結果を...
-
JavaからPHPへの値の受け渡し
-
shシェルスクリプト 空白行の...
-
【VBA】EXCELブックを開かずに...
-
findstrのerrorlevel
-
Excel VBA:特定の文字列以降(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
どういうプログラムを関数化を...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP正規表現の難題・preg_repla...
-
PHPの名前空間インポートについて
-
関数の入れ子ができない。
-
UNIX CP "で上書きしません"
-
配列の操作時にLNK2001外部シン...
-
number_formatが勝手に四捨五入
-
次のhtml・cssでspan内の文字を...
-
外部ファイル(テキスト)を取...
-
Let's Encryptで自動更新がされ...
-
可変変数にアロー演算子を使いたい
-
vb作成したらでbeep音が鳴りま...
-
CakePHPでの自作関数保存場所
-
正規表現に関する質問です。HTM...
-
String変数の文字列の検索方法
-
クラス内で上位クラス内メンバ...
-
Fatal error: Cannot use []
-
ExcelVBAで部分一致(*)をしたい
おすすめ情報