5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP】豆知識:{}波括弧とfwrite()の魔法

Last updated at Posted at 2018-01-24

{}波括弧って何?

今回は{}波括弧を中心に説明します。
PHPerはこの{}波括弧を知っている人が少なくないと思います。
自分も変数をパースする時に、よく使っていますね。

こんな便利な{}をダイスキです。

{}波括弧の記法

基本記法

sample_1

// 文字列の変数のパース
$gender_flag = '0';
echo "gender: { $gender_flag}";   // NG: gender: { 0}
echo "gender: {$gender_flag }";   // OK: gender: 0
echo "gender: {$gender_flag}";    // OK: gender: 0

// 配列の変数のパース
$gender_flag = array('male' => '0', 'female' => '1');
echo "gender: {$gender_flag[male]}";   // NG: NOTICE ERROR(undefined variable)
echo "gender: {$gender_flag['male']}"; // OK: gender: 0

// オブジェクトの変数のパース
$gender_flag = new stdClass;
$gender_flag->male = '0';
$gender_flag->female= '1';
echo "gender: {$gender_flag->male}";      // OK: gender: 0

// HTML画面の入力値による変数のパース
<input type="radio" name="gender_flag" value="{$gender_flag->male}" checked>Male
<input type="radio" name="gender_flag" value="{$gender_flag->female}">Female

本当に弱点?

今回{}波括弧に変数を埋め込んだ文字列をcsvファイルに出力したいの場合は?

sample_2

// 定義
$gender_flag = '0';
$str = "gender: {$gender_flag}";

// ログ出力
$handle = fopen("c:\\logs\\20180124.log", "a");
fwrite($handle, $str);
fclose($handle);

// ログファイル(20180124.log)を確認しましょう
gender:                  
//      ↑ [0]が消えた?

現象解消

{}波括弧がダイスキなヒトにとって、{}波括弧が弱点あることを信じられないけど、原因調査しなきゃ、グーグルには{}波括弧に関して、こういうような情報がなかなか出ないな(汗~~)
。。。。なぜ。。。。
。。。。なんで。。。。
。。。。どして。。。。
。。。。(時間過ぎ)。。。。
。。。。(もしかして波括弧の原因じゃないと)。。。。
。。。。(時間過ぎ)。。。。
良く調べたら、こういう現象は{}波括弧のせいじゃなくて、PHPではfwriteを使う時、先頭の[0]がよく消えるらしくて、(汗~~)では、書き方を次にしたら、どうですか?

sample_3

// 定義
$gender_flag = '0';
$gender_flag = sprintf("%s", $gender_flag);   // ←-追加行
$str = "gender: {$gender_flag}";

// ログ出力
$handle = fopen("c:\\logs\\20180124.log", "a");
fwrite($handle, $str);
fclose($handle);

// ログファイル(20180124.log)を確認しましょう
gender: 0                 
//      ↑ [0]が出た!

結局:
やはり{}波括弧は完璧!!!

参考
PHPマニュアル - 文字列
PHPでのCSV出力について

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?