PHPでウェブの世界と繋がろう!
menu
ホーム > PHPの文法 > 4 演算子 > 4-3 演算子における型のジャグリング(暗黙のキャスト)

4-3 演算子における型のジャグリング(暗黙のキャスト)

Pocket

- 1 分ノート ! -

  • 型のジャグリングとは規則によるデータ型の自動(暗黙の)変換
  • データ型の変換をキャストという
  • 型変換はオペランド自体の型が変更されるのではなく、オペランドがどのように評価されるかの変換
  • 文字列が数値として評価される場合
    文字列の先頭に整数値や浮動小数点数値がある場合、その数値として評価される
    文字列の先頭に数値がない場合は0と評価される
    文字列に「.(ドット)」や「e や E」がある場合は浮動小数点数値として評価される

型のジャグリング
POINT

  • 型のジャグリングとは規則によるデータ型の自動(暗黙の)変換
  • データ型の変換をキャストという
  • 型変換はオペランド自体の型が変更されるのではなく、オペランドがどのように評価されるかの変換

 型のジャグリングとは規則に応じて自動的に行われるデータ型の変換のことです。

PHPは必要に応じてデータ型を自動的に変換します。データ型の変換をキャストといいます。

殆どの演算子はオペランド(値あるいは式)に対して前提条件があります。例えば、算術演算子のニ項演算子の場合、2つのオペランドが同じデータ型であることが前提条件になっています。そのためPHPでは前提条件に則るためにデータ型を自動的に変換します。
PHPが自動的に行ってくれるので楽なのですが、どのように変換されるか理解していないと、場合によっては意図しない結果が発生してしまうことがあります。

このように暗黙的に行われるキャストのことを型のジャグリングと言います。型のジャグリングには規則があります。

算術演算子の場合の型のジャグリング規則
1番目のオペランド型 2番目のオペランド型 キャスト(変換)の規則
整数 浮動小数点 整数→浮動小数点
整数 文字列 文字列→数値
変換後の数値が浮動小数点の場合は、整数→浮動小数点
浮動小数点 文字列 文字列→浮動小数点
型のジャグリング 整数 と 浮動小数点 の場合
$var = 10 + 12.5;
echo $var."<br/>\n";
echo gettype($var);

結果は

22.5
double

となります。

整数 10 は浮動小数点として計算されます。
整数 → 浮動小数点 型のジャグリングが行われています。

型のジャグリング 整数 と 文字列 の場合
$var = 10 + "10";
echo $var."<br/>\n";
echo gettype($var);

結果は

20
integer

となります。

文字列 “10”(「"(ダブルクォート)」で囲まれた 10 は通常文字列の扱い) は整数として計算されます。
文字列 → 整数 型のジャグリングが行われています。

文字列が数値として評価される場合
 演算子のオペランドにおいて、数値が必要とされる場所で文字列が使用された場合、文字列は数値として評価されます。

POINT
  • 文字列が数値として評価される場合
    文字列の先頭に整数値や浮動小数点数値がある場合、その数値として評価される
    文字列の先頭に数値がない場合は0と評価される
    文字列に「.(ドット)」や「e や E」がある場合は浮動小数点数値として評価される

$var = "String" + 1;
echo $var.' ';
echo gettype($var)."<br/>\n";

$var = "6 String" - 1;
echo $var.' ';
echo gettype($var)."<br/>\n";

$var = "1.3 String" * 2;
echo $var.' ';
echo gettype($var)."<br/>\n";

$var = "10 String." - 1;
echo $var.' ';
echo gettype($var)."<br/>\n";

結果は

1 integer
5 integer
2.6 double
9 integer

となります。

サンプルコード

– サンプル Click Here ! –

<h3>型のジャグリング 整数と浮動小数点</h3>
<?php
$var = 10 + 12.5;
echo $var."<br/>\n";
echo gettype($var);
?>

<h3>型のジャグリング 整数と文字列</h3>
<?php
$var = 10 + "10";
echo $var."<br/>\n";
echo gettype($var);
?>

<h3>型のジャグリング 浮動小数点と文字列</h3>
<?php
$var = 10.2 + "12.5";
echo $var."<br/>\n";
echo gettype($var);
?>

<h3>文字列が数値として評価される</h3>
<?php
$var = "String" + 1;
echo $var.' ';
echo gettype($var)."<br/>\n";

$var = "6 String" - 1;
echo $var.' ';
echo gettype($var)."<br/>\n";

$var = "1.3 String" * 2;
echo $var.' ';
echo gettype($var)."<br/>\n";

$var = "10 String." - 1;
echo $var.' ';
echo gettype($var)."<br/>\n";
?>
実行結果
型のジャグリング 整数と浮動小数点
22.5
double

型のジャグリング 整数と文字列
20
integer

型のジャグリング 浮動小数点と文字列
22.7
double

文字列が数値として評価される
1 integer
5 integer
2.6 double
9 integer

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

投稿日:2011年10月31日
最終更新日:2014年02月12日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/phpref-cast/trackback/