ここから本文です

var_dumpについて 最近PHPを勉強し始めたど素人です。取りあえずPHPに慣れるた...

crp********さん

2019/8/1817:06:49

var_dumpについて

最近PHPを勉強し始めたど素人です。取りあえずPHPに慣れるために参考書どおりにプログラムを打って進めておりますが、そもそもの理解がよくできません。

var_dumpについてですが、

$msg = "おはよう";
$tokuten = 45;
var_dump($msg);
var_dump($tokuten);
の出力が

string(12) "おはよう"
int(45)

となるとありました。stringは文字列、intは整数の意味だということは分かりました。

そこでよくわからないんですが、
(1)string(12)の、「12」ってどういうことでしょうか?
(2)参考書には、var_dumpは「デバッグ中に配列の値を確認したい時に使う」ように書いてありますが、var_dumpを使う意味が実感として沸きません。上記の例ですと、"おはよう"が文字列であること、45が整数であることは見れば分かるような気がするんですが、なぜvar_dumpを使って確認するんでしょうか?
ど素人なので、そもそもの質問かもしれませんが、よろしくご教示お願いします。

閲覧数:
34
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tezcelloさん

2019/8/1821:54:20

> 「12」ってどういうことでしょうか?
その文字列の長さ(=バイト数)です。
$msg が文字列である事が判っているので strlen($msg) の結果と同じです。

> なぜvar_dumpを使って確認するんでしょうか?
単に表示させただけだと、空白文字や制御系の文字(改行やタブや etc.)は見分けつかないです。
__「非表示文字」なのだから当然だけど
なので、文字列の長さというのは重要な情報なのです。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

shimixさん

2019/8/1910:23:51

>(1)string(12)の、「12」ってどういうことでしょうか?

stringの長さ(バイト数)です。日本語の文字列なので4文字x3バイトの12ですね。

>(2)参考書には、var_dumpは「デバッグ中に配列の値を
>確認したい時に使う」ように書いてあります

配列に限りませんけどね。

たしかに値を代入するのが一箇所だけなら、phpスクリプトの最初(値を代入したところ)から最後まで同じ値(なので確認する必要がない)でしょう。



でもわざわざ変数にセットするということは、条件によって値を変更したいからです。

$tokuten = 45;
if (date('H') < '08') { $tokuten = 50; }
if (date('H') > '18') { $tokuten = 40; }

$tokuten を出力(表示)しているスクリプトであれば、その表示で値を確認できますが、そうでない場合には何がセットされているか(デバッグ時に)確認する必要が出てきます。

何かの計算で $tokuten を使っているとしたら、その計算を検証するために「そもそも $tokuten の値がいくつで計算を始めたのか」は重要ですよね?



スクリプトの最初に(もしくはすべてのスクリプトでincludeする共通部に)

define('DEBUG', true);

を書いておいて確認したいタイミングで

if (defined('DEBUG')&&DEBUG) { var_dump($tokuten); }

みたいな感じでしょうかね。デバッグが終わったら defineの行をコメントアウト(もしくは削除)します。

qo_********さん

2019/8/1821:15:05

お・は・よ・う がUTF-8でどこに割り当てられているかを確認。
http://orange-factory.com/sample/utf8/code3-e3.html

strlen、mb_strlenが何を返すのかを確認。
https://www.php.net/manual/ja/function.strlen.php
https://www.php.net/manual/ja/function.mb-strlen.php

一文字ずつ切り出して、16進数表現にして、それを戻してみる。
https://www.php.net/manual/ja/function.bin2hex.php
---
<?php
$msg = 'おはよう';
printf('%s(%sbyte. %d文字)'.PHP_EOL,
$msg,
strlen($msg),
mb_strlen($msg, 'UTF-8')
);
foreach (preg_split("//u", $msg, -1, PREG_SPLIT_NO_EMPTY) as $v) {
printf('%s -> %s(%d byte.) -> %s'.PHP_EOL,
$v,
$b2h = bin2hex($v),
strlen($v),
$h2b = hex2bin($b2h)
);
}

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる