PHP 開発で必須の標準出力チートシート

この記事は [株式会社サイバー・バズ Advent calendar 2021](https://qiita.com/advent-calendar/2021/cyberbuzz) 11日目の記事です。

10日目の記事は [一年間で「大きく成長できた」と感じたターニング技術一覧！](https://qiita.com/Hirochon/items/d8071f19ad4159a3408f) 、
12日目の記事は [GoogleAppsScript(GAS)で効率化する時になんだかんだよく使うコードスニペット10選](https://qiita.com/kashira2339/items/d0e399a97bf586132ea1) です。

# 本題

PHP を使い始めて3ヶ月、未だに標準出力を雰囲気で使っているので、自戒も兼ねてまとめました。

- **前半：標準出力のについておさらい**
- **後半：チートシート**

という構成で進めます。

手っ取り早く**「チートシートだけ見たい！！！」**って方は [PHP標準出力チートシート](https://qiita.com/Rone_Loreto/items/64daa56a7dca554829d3#php%E6%A8%99%E6%BA%96%E5%87%BA%E5%8A%9B%E3%83%81%E3%83%BC%E3%83%88%E3%82%B7%E3%83%BC%E3%83%88) に飛んで下さい。

# 標準出力

[print_r](https://qiita.com/Rone_Loreto/items/64daa56a7dca554829d3#print_r), [var_export](https://qiita.com/Rone_Loreto/items/64daa56a7dca554829d3#var_export), [var_dump](https://qiita.com/Rone_Loreto/items/64daa56a7dca554829d3#var_dump) の３つあります。

## print_r

```php
print_r(mixed $value, bool $return = false)
```

[PHP: print_r - Manual](https://www.php.net/manual/ja/function.print-r.php) より引用

- `$value`：出力したい値
- `$return`：(省略可。初期値 `false`) true の時は string を返すようになります。

例えば

```php
$str = "test";
print_r($str);
```

の出力は

```php
test
```

となります。

## var_export

```php
var_export(mixed $value, bool $return = false)
```

[PHP: var_export - Manual](https://www.php.net/manual/ja/function.var-export.php) より引用

- `$value`：出力したい値
- `$return`：(省略可。初期値 `false`) true の時は値そのものを返すようになります。

例えば

```php
$str = "test";
var_export($str);
```

の出力は

```php
'test'
```

となります。

## var_dump

```php
var_dump(mixed $value, mixed ...$values)
```

[PHP: var_dump - Manual](https://www.php.net/manual/ja/function.var-dump.php) より引用

- `$value`：ダンプしたい値
- `$values`：追加でダンプしたい値

渡ってきた値について、構造化された情報を出力します。
また、複数の値の情報を出力することが出来ます。

注意点ですが、print_r や var_export と異なり `$return` のパラメータが無いため**値そのものを返すことはできません。**


例えば

```php
$str = "test";
var_dump($str);
```

の出力は

```php
string(4) "test"
```

となります。

# PHP標準出力チートシート

「各出力において」「各型の値がどう返ってくるか」を記載しています。
対象の型は、整数、浮動小数点数、文字列、論理、配列、オブジェクト、null, の7つです。
※ リソース、callable, Iterable, enum(PHP 8.1〜) は今回割愛します。

||`print_r($value)`|`var_export($value)`|`var_dump($value)`|
|:-:|:--|:--|:--|
|整数<br>**`$value = 1`**|1|1|int(1)|
|浮動小数点数<br>**`$value = 3.14`**|3.14|3.14|float(3.14)|
|文字列<br>**`$value = "php"`**|php|'php'|string(3) "php"|
|論理<br>**`$value = true`**|1|true|bool(true)|
|配列<br>**`$value = array("hoge", "fuga", "piyo")`**|Array<br>(<br>[0] => hoge<br>[1] => fuga<br>[2] => piyo<br>)|array (<br>0 => 'hoge',<br>1 => 'fuga',<br>2 => 'piyo',<br>)|array(3) {<br>[0]=><br>string(4) "hoge"<br>[1]=><br>string(4) "fuga"<br>[2]=>string(4) "piyo"<br>}|   
|オブジェクト<br>**`$value = (object)"object"`**|stdClass Object<br>(<br>[scalar] => object<br>)|(object) array(<br>'scalar' => 'object',<br>)|object(stdClass)#1 (1) {<br>["scalar"]=><br>string(6) "object"<br>}|   
|null<br>**`$value = null`**| |NULL|NULL|   

一覧にしてみると、かなりの違いがありますね。

注目したいものとしては、

- 論理型において `print_r` は0または１で出力される
- null のときに `print_r` は空が出力される

点があります。
他にも、配列とオブジェクトについては出力が大分異なるので、必要な情報に応じた使い分けが良さそうです。

# まとめ

標準出力を使いこなすと、開発効率が著しく向上します。
とりあえず**エラーで詰まったら「値がどうなってるのか出力だ！」**って感じに、バンバン活用していきましょう。

そして **commit する前に不要な出力は削除**するようにしましょう。

## 参考記事

使い分け方については、下記記事がオススメです。

- [[PHP] print_r、var_dump、var_export のちがい - Qiita](https://qiita.com/yasumodev/items/4b0e5a0d2d1ec3b3177b)
- [var_dump、var_export、print_r、デバッグ時に使うのがベストなのはどれ！？ - Qiita](https://qiita.com/awesam86/items/1103079594fefc8e9f3f)