
どうもタスです。
プログラムは、変数に代入する数値や文字列などのリテラルを分類する「型」というものを使用します。
PHPは動的型付け言語のため、変数を使用する際に明示的に型を宣言する必要はないですが、全ての変数は型を持っていて、内部的には明確に分類されています。
そこで今回は、型のうちの一つである「string型」について応用的な使い方について説明します。
「string型」の基本的な構文についての説明は以下をご覧ください。
「boolean」型もしくは「integer」型についての説明は以下の記事を参考にしてください。
「float」型もしくは「double」型についての説明は以下の記事を参考にしてください。
PHPの10種類の基本型
PHPは、10種類の基本型をサポートしており、以下のとおりになります。
4種類のスカラー型
- 論理値:boolean
- 整数:integer
- 浮動小数点数:float, double
- 文字列:string
4種類の複合型
- 配列:array
- オブジェクト:object
- callable
- iterable
2種類の特別な型
- リソース:resource
- ヌル:NULL
上記の中で、今回は「文字列:string」に焦点を当てています。
波括弧を用いた文字列内での変数の展開
二重引用符でもお伝えしたとおり、文字列中に変数を展開させることは可能です。
例えば、
1 2 3 4 5 |
<?php $str = "tasulife"; // このブログの名前は、tasulife です。 echo "このブログの名前は、$str です。"; |
のように変数が展開されます。
ただし、上記は変数の後に半角スペースを挿入しています。
なぜかと言うと、$(ドルマーク)以降、どこまでが変数を指しているのか分からないためです。
よって、変数に続いて文字列を記述する際は{}(波括弧)で括るようにしましょう。
1 2 3 4 5 |
<?php $str = "tasulife"; // このブログの名前は、tasulifeです。 echo "このブログの名前は、{$str}です。"; |
文字列内で展開可能な様々な変数
展開可能な変数は、スカラー型だけではありません。
以下のとおり、複合型である配列やオブジェクトも展開可能です。
例えば配列の場合は以下のとおりとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $players = array("Lebron", "Giannis", "KD", "Kawhi"); // NBAのSF選手は、Lebron、Giannis、KD、Kawhiがいます。 echo "NBAのSF選手は、$players[0]、$players[1]、$players[2]、$players[3]がいます。"; $all_nba = array( 'G1' => 'Curry', 'G2' => 'Harden', 'F1' => 'PG', 'F2' => 'Giannis', 'C' => 'Jokic' ); // AllNBAの選手は、GがCurry、Harden、FがPG、Giannis、CがJokicです。 echo "AllNBAの選手は、Gが{$all_nba['G1']}、{$all_nba['G2']}、Fが{$all_nba['F1']}、{$all_nba['F2']}、Cが{$all_nba['C']}です。"; |
また、オブジェクトは以下のとおりです。
1 2 3 4 5 6 7 8 9 10 |
<?php class nba { public $cavs = "Cleveland Cavaliers"; public $heat = "Maiami Heat"; public $la = "Los Angeles Lakers"; } $nba = new nba(); echo "レブロン・ジェームスは、{$nba->cavs}、{$nba->heat}、{$nba->cavs}(復帰)、{$nba->la}とチームを変遷しています。"; |
文字列への文字単位のアクセスと修正
「$str[10]」のように、角括弧を使用してゼロから始まるオフセットを指定することで、文字列内の任意の文字にアクセス及び修正することが可能です。
つまり、文字列を文字の配列として扱えるということです。
複数の文字を取得したり修正する場合は、別途、関数を使用して行います(substr(), substr_replace())。
オフセットへの指定はPHP7.1.0以降から負数も指定可能になりました。負数を指定することで、文字列の末尾からのオフセットを表します。
なお、以前のバージョンではエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php $str1 = "abcde"; $str2 = "fghij"; // b echo $str1[1]; // b // 波括弧でもOK echo $str1{1}; // d echo $str1[-2]; // e echo $str1[strlen($str1)-1]; // fgzij $str2[2] = "z"; echo $str2; // fgzij k // オフセットの範囲外に書き込んだ場合は、空白文字が埋められる $str2[6] = "k"; echo $str2; // fg�ij // マルチバイトには対応していない $str2[2] = "あ"; echo $str2; // Notice // オフセットの範囲外 echo $str1[6]; // Warning // マルチバイト文字はオフセットに適さない echo $str1['a']; |
文字列の結合演算子
文字列は、「.」(ドット)結合演算子及び結合代入演算子「.=」により文字列結合することが可能です。
使い方は以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $str1 = "blog name is "; $str2 = "tasulife"; // blog name is tasulife // 結合演算子 echo $str1. $str2; $str1 .= $str2; // blog name is tasulife // 結合代入演算子 echo $str1; |
文字列への変換
文字列へのキャストは、(string)やstrval()関数を使って変換することができます。
その際に、booleanのTRUEは「1」に、FALSEは空文字列に変換され、NULLは常に空文字列に変換されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $num = 120; $boolT = TRUE; $boolF = FALSE; var_dump($num); // int(120) var_dump($boolT); // bool(true) var_dump($boolF); // bool(false) var_dump((string)$num); // string(3) "120" var_dump(strval($boolT)); // string(1) "1" var_dump((string)$boolF); // string(0) "" |