文字列型:string
そふぃのPHP入門 >> PHP言語リファレンス >> PHPの型 >> 文字列型:string

文字列型:string

文字列型とは

文字列型とは「文字」の事です。PHPで文字列型を表すためにはシングルクォート・ダブルクォートまたはヒアドキュメントを使用します。この辺についてはPHPの基本文法:文字列の扱いですでに述べているので割愛します。

ダブルクォートかヒアドキュメントで文字列を扱った場合には中の変数が展開されますが、変数のすぐ後ろに変数名として有効な文字列があると、PHPはその文字列も含めた変数を探します。これを回避するために変数を波括弧「{}」で囲んだと思います。

参考 文字列内での変数展開(変数展開時の注意点)

または変数と文字列を結合させるのも回避策としては有効です。

参考 文字列と変数の結合

文字列と変数の連結についてはいいとして、波括弧「{}」で囲む変数の表し方については実はいろいろな書き方がありますので紹介します。

  1. <?php
  2. $fruit = "りんご";
  3. echo "果物では{$fruit}が好きです。"; //$記号ごと中に
  4. echo "果物では${fruit}が好きです。"; //$記号は外に
  5. ?>

出力結果

果物ではりんごが好きです。果物ではりんごが好きです。

上の2つのサンプルは$記号を波括弧「{}」の中に入れるか外に出すかの違いだけですが、PHPではどちらの構文でも使用可能です。

文字列中で変数を表すのに波括弧「{}」構文を使用する場合は、最初の波括弧「{」とドル「$」記号が連続していなければなりません。以下のような書き方だと波括弧まで「文字列」と認識されて表示されてしまいますので注意して下さい。

  1. <?php
  2. $fruit = "りんご";
  3. echo "果物では{ $fruit}が好きです。"; //{と$の間にスペースを入れた
  4. ?>

出力結果

果物では{ りんご}が好きです。

文字列から文字を抜き出す

波括弧「{}」はもう1つ、便利な使い方があります。「文字列」の中から「文字」を抜き出す事ができるのです。

  1. <?php
  2. $string = "abc123";
  3. echo $string{0}."<br />\n"; //0番目つまり先頭の文字だけ抜き出して表示
  4. echo $string{4}; //5番目の文字を表示
  5. ?>

出力結果

a
2

注意したいのは数値の数え方が0から始まる点です。普段の日常生活では1から数えますが、プログラムでは0から数える事が多いので覚えておいて下さい。

ただし、この方法では日本語は抜き出せません。何故かというと、この構文では○番目の1バイト分の文字を抜き出しているからです。

文字コードの説明になってしまいますので細かい話は避けてごく簡単に解説しますが、英語や半角数字などは1バイトの文字です。これに対して日本語は2バイト分使って初めて「文字」として認識させています。半角か全角かという問題でもありません。半角カナもこれでは抜き出せません。半角カナも結局は2バイト文字なのです。また、文字コードがUTF-8になると3バイト使用する文字もあります。これ以上の細かい説明は避けますので興味のある方は文字コードのサイトなどで別にご覧下さい。

どうしても波括弧を使用して日本語を表示させたい場合は該当文字のバイト数分抜き出して連結させると目的の文字が出力されます。

  1. <?php
  2. $string = "日本語";
  3. echo $string{0}.$string{1}.$string{2}; //最初の3バイト分表示
  4. ?>

出力結果

ただし、指定する数値を間違えるととんでもない文字が出力されたりします。上記の場合「日」なら0~2番目の文字コード3バイト分を使ってます(UTF-8の場合)。「本」なら3番目~5番目の両方です。試しに1番目と2番目という指定方法で出力してみてください。変な文字がでてきますw。

2バイト文字という日本語の特性から考えると、この方法でスクリプトを組むのは面倒になるだけでなくバグにも繋がりやすいのであまりお勧めできません。2バイト文字を扱える関数なんかもありますのでそっちを使った方がいいでしょう。

文字列型への変換

他の型から文字列型に変換したい場合、キャスティングやsettype()関数での変換の他にstrval()関数というものが用意されています。変数の型を含めた詳しい情報を見たい時はvar_dump()関数を使います。

参考 型について(型の変換)

  1. <?php
  2. $var = 25.4; //浮動小数点型
  3. echo "<pre>";
  4. var_dump( (string)$var ); //キャスティングで変換して情報出力
  5.  
  6. var_dump( strval($var) ); //strval関数を使用して変換
  7.  
  8. var_dump( settype($var,"string") ); //settype関数で文字列型に変換
  9. echo "</pre>";
  10. ?>

出力結果

string(4) "25.4"
string(4) "25.4"
bool(true)

論理型・ヌル型からの変換はTRUEが文字列の「"1"」にFALSE・NULLが空文字列「""」に変換されます。

整数型や浮動小数点型はその数値がそのまま文字列に変換されます。

配列型は常に「array」という文字列に変換されますので、配列の中身全てを知りたい時はecho()文やprint()文ではなく、print_r()関数やvar_dump()関数を使います。

参考 print_r()関数で配列情報出力

参考関数

  • settype() ---- 変数の型をセットする
  • strval() ---- 変数の文字列としての値を取得する
  • print_r() ---- 指定した式に関する情報を解りやすく出力する
  • var_dump() ---- 指定した変数に関する情報をダンプする

文字列と数値の計算

数値として文字列が評価された時場合、数値の中にドット「.」、「e」、「E」のどれかが含まれている場合は浮動小数点型(float)として評価され、それ以外は整数型(integer)として評価されます。

文字列を計算してみる

文字列が一般的な数値としての表現なら、数値と文字列の計算式を入れてもPHPが勝手に計算してくれます。gettype()関数で変数の型を取得してみます。

  1. <?php
  2. $var = 1 + "6"; //6は文字列型である
  3. echo '$varの値:'.$var." 型:".gettype($var);
  4. ?>

出力結果

$varの値:7 型:integer

参考関数

書式

  • string gettype( mixed var )

数値と文字列の計算をしてみたのですが、PHPが勝手に文字列を整数に変換して計算してくれます。整数の計算を行ったので型はintegerつまり整数型に自動で変換されています。

計算式の最初の部分が文字列であっても2番目の部分が数値なら計算できます。

  1. <?php
  2. $var = "10.0という浮動小数点値 " + 1;
  3. echo '$varの値:'.$var." 型:".gettype($var);
  4. ?>

出力結果

$varの値:11 型:double

こちらは少数付きの計算を行ったので、doubleつまり浮動小数点型になります。浮動小数点型はfloatとして紹介してきましたが、浮動小数点型には「float」と「double」という2つの呼び方があります。gettype()関数で返す値は今のところ「double」の方です。

数値として解釈できる範囲

さらに、文字列が数値で始まっていればPHPは数値として理解できる範囲までを勝手に理解して計算してくれます。

  1. <?php
  2. $var = 1 + "101匹わんちゃん"; //数値として解釈できるのは101まで
  3. echo '$varの値:'.$var." 型:".gettype($var);
  4. ?>

出力結果

$varの値:102 型:integer

この場合、「匹わんちゃん」の部分は数値として認識できないために無視され、最初の101のみが計算対象になります。その結果、$varには102が代入されている状態で、型は整数値の計算をしたのでintegerつまり整数型に変換されています。こういった解釈はPHPが自動で行ってくれるので非常に便利です。

文字列が数値で始まっていない場合は文字列中に数値があっても認識されませんので注意して下さい。

  1. <?php
  2. $var = 1 + "わんちゃんが101匹"; //101を数値として解釈できない
  3. echo '$varの値:'.$var." 型:".gettype($var);
  4. ?>

出力結果

$varの値:1 型:integer

文字列が数値で始まっていないために解釈できる部分がなく、文字列部分は全て無視されたのでこのような結果になりました。