@blog.justoneplanet.info

日々勉強

PHP String Basics(文字列の基本)

■文字列データの使用

JavaScriptではシングルクォートもダブルクォートも同じ扱いであるが、PHPでは変数の展開において挙動が異なる。

シングルクォート

通常は以下のようにシングルクォートで括る。最もシンプルで一般的な方法だ。

<?php
$str = 'sample';
?>

シングルクォート内でシングルクォートを文字列として表現するためには、以下のようにエスケープする。エスケープを表現したい時も同様にエスケープする。

但し、その他についてはマーク「」が直接表示される。従って、改行やタブなどを表現したいときは、シングルクォートは使えない。

<?php
$name = 'John's';
$str = 'This is \';
print($name);//John's
print($str);//This is 
?>

ダブルクォート

以下のようにダブルクォートで括ると変数が展開される。

<?php
$name = 'John';
$str = "Hello, $name";
echo $str;//Hello, John
?>

もしも展開される変数名の後にアルファベットが続いている場合、PHPは
変数名を判断できない。従って、以下のように{}で括ってあげる必要がある。

<?php
$fruit = 'apple';
$str = "This is two {$fruit}s";
//$str = "This is two ${fruit}s";
print($str);
?>

個人的には好きではないが、コメントアウトしたような括り方をする人もいるようだ。また、マーク「$」を表示させたい場合は、変数と認識されないように、エスケープされる必要がある。

ヒアドキュメント

以下のようにヒアドキュメント内でも、変数は展開される。自分の環境ではエラーは出なかったが「<<<」と識別子の間にはスペースが1つ以上必要とされる。最初の識別子の後にセミコロンは置かない。最後の識別子の後にはセミコロン、もしくは改行が置かれなくてはならない。また、最後の識別子の前の改行コードのみ削除される。

<?php
$name = 'Jack';
$str = <<< EOD
Hello, $name
My name is Mike.
This is ......
EOD;
print($str);
/*
Hello, Jack
My name is Mike.
This is ......
*/
?>

但し、以下のようなクラスのプロパティにおいて、ヒアドキュメントはパースエラーとなってしまい使用できない。

<?php
class Person {
    $greeting = <<< EOD
Hello, everyone!
EOD;
}
?>

個人的な見解であるが、ヒアドキュメントは可読性が下がると考えている。従って、正直に言ってしまうと嫌いな方である。

■文字列の長さ

以下のようにstrlen関数を使うと、文字列の長さを判定できる。但し、マルチバイト文字を扱うときは、mb_strlen関数を使用しなくては正しい結果が導き出せない。

<?php
$str = 'She said that she likes him';
print(strlen($str));//27
?>

各関数について

int strlen(string $str)
文字列の長さを求める。
int mb_strlen(string $str[, string $encoding])
マルチバイト文字列の長さを求める。

■文字列の変換

以下のようにstrtr関数を使うと、文字列の中の特定の値について変換が行われる。

<?php
$str = 'we';
$str = strtr($str, 'w', 'm');
print($str);//me
?>

また、以下のように連想配列を変換テーブルに設定することもできる。

<?php
$str = 'we';
$str = strtr($str,
    array(
        'w' => 'm',
        'e' => 'y'
    )
);
print($str);//my
?>

但し、以下のような場合は上手くいかない。strtr関数においては検索文字列と変換後文字列の文字数は等しいことが前提であり、長いほうの余分な文字列は無視されるからだ。

<?php
$str = 'She loves him.';
$str = strtr($str, 'She', 'Her dog');
print($str);//Her lovrs eim.
?>

各関数について

string strtr(string $str, string $form, string $to)
string strtr(string $str, array $relace_table)
特定の文字を変換する。

大文字と小文字の変換

以下のような関数を使って大文字と小文字を変換することができる。

<?php
$str = 'johN nortoN';
print(strtolower($str));//john norton
print(strtoupper($str));//JOHN NORTON
print(ucfirst($str));//JohN nortoN
print(ucwords($str));//JohN NortoN
?>
各関数について
string strtolower(string $str)
文字列を小文字にする。
string strtoupper(string $str)
文字列を大文字にする
string ucfirst(string $str)
文字列の最初の文字を大文字にする。
string ucwords(string $str)
単語ごとの最初の文字を大文字にする。

■空白の除去

以下のようにtrim関数を用いて余分な空白を除去することができる。

<?php
$str = '   Pochi ';
print(trim($str));//Pochi
?>

各関数について

string trim(string $str[, string $charlist])
文字列の先頭と末尾からホワイトスペースなどを取り除く。

■URLのエンコードとデコード

URLのエンコード方式には、スペースの扱いが異なる2種類の関数が用意されている。

RFC1738方式

ディレクトリ名などの変換に使用する。

<?php
$str = 'john norton';
print(rawurlencode($str));//john%20norton
?>

application/x-www/form-urlencoded方式

クッキーやクエリ文字列の変換に使用する。但し、クッキーは自動で変換されるので、主にクエリ用に使う。

<?php
$str = 'john norton';
print(urlencode($str));//john+norton
?>
各関数について
string rawurlencode(string $str)
RFC1738方式に基づきURLをエンコードする。
string rawurldecode(string $str)
RFC1738方式に基づきURLをデコードする。
string urlencode(string $str)
application/x-www/form-urlencoded方式に基づきURLをエンコードする。
string urldecode(string $str)
application/x-www/form-urlencoded方式に基づきURLをデコードする。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment