文字列の扱いについて

目次

お久しぶりです。井出です。

最近触ることが少なくなったPHPですが
先日改修案件があり前々から気になっていたことを
整理することができたので、今回記事にしました。
それは文字列の扱い方です。

最近rubyを触ることが多いので
PHPとRubyを比較して説明していこうと思います。

その前に「文字列」とは何なのか
からお話しできればと思います。

文字列とは

文字列とは文字の集合体です。

「プラコレ」という文字列を例に挙げて説明します。

プログラム上、「プラコレ」は分解すると
「プ」「ラ」「コ」「レ」
という4つの文字が集合して文字列として成り立っています。
文字列は文字の集合体とはそういうことになります。

では実際にプログラムの話をしていこうと思います。

Rubyにおいて

Rubyは直観的にソースコードを書け、また豊富なライブラリがあるため、
書いてて楽しい言語ですね。
ruby or railsについては色々話したいので、また別の機会に。

さて本題のRubyの文字列の扱い方ですが
単純明快凄い分かりやすい

#{}で変数を囲むことで変数内に格納された文字列が展開されます。

変数と通常の文字列を併用して使うことも可能です。

ただし注意が必要なのが、これは
ダブルコーテーション「"xxxx"」で括った場合です
シングルコーテーション「'xx'」の場合は、変数の値は展開されません。
※後の説明で使用するPHPも同じです。

※ #の前に「\」が、入りました。これはエスケープ文字といいます。
エスケープ文字系を説明すると、1記事書けるレベルなので、
今回は省略させていただきます。

PHPにおいて

さて次はPHPです。以前までこよなく愛してた言語です。
(過去形になっているということはそういうことです。Rubyに気持ちは奪われております。)

Rubyと同じように勿論変数値の展開はできます。

お気づきの方がいるかもしれませんが、
ruby と PHPで記述方法が大きく異なる点があります。

まず1つ目に変数には「$」を付ける。
2つ目に処理の最後に「;」セミコロンを付ける。
※ 正確にはrubyは、セミコロン省略可能。なので付けても良い

これが良くも悪くも、PHPたまに触ると高確率でエラーとなります。

慣れというのは怖いもので、変数につける「$」については
C系だと無かったので、そんなに違和感無かったのですが
セミコロンを付け無いのは慣れてしまったものの、
個人的にはあった方が、やっぱしっくりきますね。。

さて本題に戻りPHPの文字列展開について
さきほどのrubyを例に同じ内容で記載すると

変数名を入れると、そのまま展開してくれます。
凄い便利ですよね。

で、1つ気になったのが
変数名($hoge)の後ろに[.]を付けていますが
この部分に「_」を入れた場合どうなるのか。

エラりました。
変数名に使用可能な文字列を、変数名の後ろに使用した場合
どこまでが展開する変数なのか。
がPHP側で認識できないためエラります。

今回でいうと
$hoge_ という変数の展開をしよう試みます。
$hoge_ という変数は存在しないためエラー
という結果になりました。

上記のパターンを実現したいときは
先に説明した中括弧で括るようしましょう。

リテラル文字列というか
文字列の展開方法みたいな説明になってしまいましたが
色々整理できたので個人的にはよかったです。

次は今回の説明でもでた、エスケープ文字について
お話できればと思います。

ありがとうございました!