- PHPが気になっている人
- PHPを勉強し始めたばかりの人
- PHP初級技術者認定試験を受験しようと思っている人
こんにちは、Toyです。
本日もPHP技術者認定初級試験に向けた勉強を行っていきたいと思います。
前回は第1回目だったので、『PHPの特徴』について勉強しましたね。
ご覧になりたい方がいらっしゃいましたら、こちらをご覧ください!
本日のテーマは『テキストと数の操作』についてです。
変数
変数とは
変数とは、簡単に言うと、プログラム実行時に使用する値を保存するための容器です。この容器(変数)を管理するためにつける名前を変数名と呼び、変数名の前には 「$」を付けます。
変数名の指定
変数名に適用される命名規則は以下の通りです。
- 先頭の文字はアルファベット、またはアンダースコア「_」
- 2文字目以降は、アルファベット、数字、アンダースコア「_」のみ
文字列のエスケープ
PHPプログラムでは文字列を指定する場合、文字列を単一引用符(シングルクォーテーション)「”」、または二重引用符(ダブルクォーテーション)「“”」を使用して文字列を囲みます。
文字列内に特殊文字が含まれる場合、単一引用符と二重引用符とで動作が異なります。
単一引用符で囲まれた特殊文字はそのまま文字列として扱われるのに対し、二重引用符で囲まれた特殊文字は特殊文字が意味する値に置き換わります。変数名も特殊文字と同様に変化します。
(※OSによって動作が異なることはありません。)
特殊文字 | 意味 |
---|---|
\n | 改行(ASCIIコード10) |
\r | 復帰(ASCIIコード13) |
\t | タブ(ASCIIコード9) |
\\ | \ |
\$ | $ |
\” | “ |
\0 〜 \77 | 8進数でASCII文字を表す |
\x0 〜 \FF | 16進数でASCII文字を表す |
テキスト操作
テキストの出力
テキストの出力には「print関数」、または「printf()関数」を使用します。
printf()関数は、フォーマットを指定することで、型式を揃えた文字列を出力することができます。
<printf()関数の使用例>
$x = 5.0;
$y = 0.65;
printf('The product of $x and $y is %.1f', $x*$y);
上記の例では「%.1f」は小数点以下1桁の浮動小数点数であり、「$x*$y(=3.25)」の値に置き換えられます。
ただし、小数点以下の桁数が指定された場合、小数点以下で指定された桁数以下の値が5より大きい場合は切り上げ、5以下である場合は切り捨てとなります。
したがって、上記のプログラムの出力結果は下記になります。
The product of $x and $y is 3.2
テキストの処理
テキストを処理する関数としてよく使用されるものを下の表に示します。
関数 | 役割 |
---|---|
strlen() | 文字列の長さを調べる <使用例> print strlen($buffer); 出力結果「10」 |
substr() | 文字列の一部を取り出す (開始位置と終了位置を引数として渡す。先頭位置は0) <使用例> print substr($buffer, 0, 4); 出力結果「 abB」 |
str_replace() | 一部の文字列を置き換える (変換前の文字列と変換後の文字列を引数として渡す) <使用例> print str_replace('BCD', bcd', $buffer); 出力結果「 abbcdd 」 |
trim() | 文字列の前後の空白を取り除く <使用例> print trim($buffer); 出力結果「abBCDd」 |
strtolower() | 文字列を全て小文字に変換する <使用例> print strtolower($buffer); 出力結果「 abbcdd 」 |
strtoupper() | 文字列を全て大文字に変換する <使用例> print strtoupper($buffer); 出力結果「 ABBCDD 」 |
ucwords() | 文字列中の単語の先頭のみ大文字に変換する <使用例> print ucwords($buffer); 出力結果「 AbBCDd 」 |
(ただし、$buffer = ‘ abBCDd ‘とする)
文字列結合
PHPで文字列を結合したい場合は、結合演算子「.」を使います。
<結合演算子の使用例>
$num1 = 20;
$num2 = 19;
// 左側の引数と右側の引数を結合します
print $num1 . $num2 . "\n";
// 下記は文字列結合代入演算子(.=)を使用
// 左側の引数と右側の引数を結合し、左側の引数に代入します
$num1 .= $num2;
print $num1. "\n";
上記のプログラム出力結果はこちらです。
2019
2019
文字列の比較
文字列を比較する方法は2種類あります。
1つは、等価演算子「==」を使う方法で、もう1つは、strcasecmp()関数を使う方法です。
方法 | 役割 |
---|---|
等価演算子「==」 | 大文字と小文字を区別する 文字列が一致する場合は「true(1)」を返す 文字列が一致しなかった場合は何も出力されない |
strcasecmp()関数 | 大文字と小文字を区別しない 大文字と小文字を考慮せずに文字列が一致する場合は「0」を返す |
strcasecmp()関数は、1つ目の引数と2つ目の引数を辞書順に比較します。
左側の文字列が右側の文字列よりも小さい場合は負の値を返し、大きい場合は正の値を返します。
<strcasecmp()関数の使用例>
// strcasecmp(23,211)の返り値が負であった場合「small」を出力する
if (strcasecmp(23,211) < 0) print 'small';
else print 'big';
このプログラムの出力結果は
big
となります。
ヒアドキュメントとナウドキュメント
ヒアドキュメントとは
ヒアドキュメントは、変数を含む文字列を定義したり、出力したりするために利用されます。多くの変数を含む長いHTMLブロック内での利用にオススメです。
ヒアドキュメント構文は以下のように記述します。
<<<区切り文字
文字列
区切り文字;
<ヒアドキュメントの使用例>
$greeting = "Hello world";
echo <<<EOD
Print buffer: $greeting<br/>
EOD;
この表示結果は
Print buffer: “Hello world”
となります。
ナウドキュメントとは
Nowdoc(ナウドキュメント)とは、ヒアドキュメントと同様に文字列を囲んだものですが、文字列中に含まれる変数を展開しません。
Nowdoc構文は以下のように記述します。
<<<'区切り文字'
文字列
区切り文字;
<Nowdocの使用例>
$greeting = "Hello world";
echo <<<'EOD'
Print buffer: $greeting<br/>
EOD;
この表示結果は
Print buffer: $greeting
となります。
まとめ
ヒアドキュメントはダブルクォーテーションで複数行の文字列を囲んだもの、Nowdocはシングルクォーテーションで複数行の文字列を囲んだものと考えることができます。
終了を示す識別子がある行には、セミコロン「;」以外の文字を含んではいけません。
「;」以外の文字を記述したり、終了を示す識別子にインデントしたり(半角スペースやタブを入れる)すると「syntax error」が発生します。
算術演算
こちらの表は算術演算子一覧です。
演算子 | 役割 |
---|---|
+ | 加算子 |
– | 減算子 |
* | 乗算演算子 |
/ | 除算演算子 |
% | 剰余演算子 |
算術演算子は代入演算子と併用することで複合代入演算子となります。
複合代入演算子 | 使用例 | 等価式 |
---|---|---|
+= | $a += 2 | $a = $a + 2 |
-= | $a -= 2 | $a = $a – 2 |
*= | $a *= 2 | $a = $a * 2 |
/= | $a /= 2 | $a = $a / 2 |
%= | $a %= 2 | $a = $a % 2 |
さらに、変数に対して1を加算(または減算)することが多いため、専用の演算子が存在します。「++演算子」は変数に1を足し、「–演算子」は変数から1を引きます。
<算術演算子の使用例>
$a = 1;
print $a . "\n";
// $aに$a*2の結果を代入(1*2 = 2)
$a *= 2;
print $a . "\n";
// $aに$a÷1の余りを代入(2%1 = 0)
$a %= 1;
print $a . "\n";
// $aに$a+1の結果を代入した後(0+1 = 1)に$a出力される
print ++$a . "\n";
// $a+1の結果を$aに代入する前に$a(= 1)が出力される
print $a++ . "\n";
print $a;
上述プログラムの出力結果は
1
2
0
1
1
2
となります。
上記プログラムからも確認できるように、「++演算子」と「–演算子」は記述する位置によって動作が異なるので注意が必要です。
終わりに
今回は「テキストと数の操作」について勉強しました。
次回は、「ロジック判定と繰り返し」についてです。お楽しみに〜
# To be continued