文字列

文字列は、2組のデリミタの1つを用いて指定できます。

文字列が2重引用符(")で括られた場合, 文字列の中の変数は展開されます。 (ただし、いくつかの解釈時の制約を受けます) C や Perl と同じく以下のようにバックスラッシュ文字 ("\") を特別な文字を指定するために使用することができます。

表 6-1. エスケープされた文字

記述意味
\nラインフィード(LFまたはアスキーの0x0A)
\rキャリッジリターン (CRまたはアスキーの0x0D)
\t水平タブ(HTまたはアスキーの0x09)
\\バックスラッシュ
\$ドル記号
\"2重引用符
\[0-7]{1,3} 正規表現にマッチする文字シーケンスは、8進数表記の1文字です。
\x[0-9A-Fa-f]{1,2} 正規表現にマッチする文字シーケンスは、16進数表記の1文字です。

他の文字をエスケープすることも可能ですが、 警告レベルを最高にした場合には警告が発生します。

文字列を区切る2番目の方法はシングルクオート文字("'")を使う方法です。 ある文字列が引用符で括られている場合、 理解されるエスケープ文字は、"\\" および "\'" のみです。 引用符とバックスラッシュを引用符で括られた文字列で 使用可能とする際に便利なようになっています。 変数は、引用符で括られた文字列の中では展開されません。

文字列を区切る別の方法としてヒアドキュメント構文("<<<") があります。この場合、あるIDを<<<の後 に指定し、文字列を置いた後で、同じIDを括りを閉じるために置きます。 終端IDは、その行の最初のカラムから始める必要があります。使用するラ ベルは、PHPの他のラベルと同様の名前に関する規則に従う必要がありま す。つまり、英数字およびアンダースコアのみを含み、数字でない文字ま たはアンダースコアで始まる必要があります。

ヒアドキュメントは、2重引用符を使用せませんが、2重引用符で括られた 文字列と全く同様に動作します。しかし、この場合でも上記のリストでエ スケープされたコードを使用することも可能です。変数は展開されますが、 文字列の場合と同様にヒアドキュメントの内部で複雑な変数を表わす場合 には注意が必要です。

例 6-1. ヒアドキュメントによる文字列括りの例


<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

/* 変数を使用するより複雑な例 */
class foo {
    var $foo;
    var $bar;

    function foo() {
        $this->foo = 'Foo';
        $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
}

$foo = new foo();
$name = 'MyName';

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
     

注意: ヒアドキュメントはPHP4で追加されました。

文字列は、'.' (ドット)結合演算子で結合することが可能です。 '+'(付加)演算子はこの例では出てこないことに注意して下さい。詳細については 文字列演算子を参照下さい。

文字列の中の各文字には、C言語の構文のように数字を添字とした文字の配列 として文字列を取り扱うことによりアクセス可能です。以下の例を参照下さい。

例 6-2. 文字列の例


<?php
/* 文字列を代入する */
$str = "This is a string";
 
/* 文字列に追加する */
$str = $str . " with some more text";
 
/* エスケープされた改行を有する別の追加の方法。 */
$str .= " and a newline at the end.\n";
 
/* この文字列は'<p>Number: 9</p>' となります */
$num = 9;
$str = "<p>Number: $num</p>";
 
/* この文字列は、'<p>Number: $num</p>' となります */
$num = 9;
$str = '<p>Number: $num</p>';
?>	  

/* 文字列の最初の文字を得ます。  */
$str = 'This is a test.';
$first = $str[0];

/* 文字列の最後の文字を得ます。 */
$str = 'This is still a test.';
$last = $str[strlen($str)-1];
?>	  
     

文字列の変換

数値として文字列が評価された時、結果の値と型は次のように 定義されます。

文字列は、'.'、'e'、'E' のどれかが含まれている場合は double、 それ以外は整数として評価されます。

文字列の最初の部分により値が決まります。 文字列が、有効な数値データから始まる場合、この値が使用されます。 その他の場合、値は 0 (ゼロ) となります。 有効な数値データは符号(オプション)の後に、1つ以上の 数字(オプションとして小数点を一つ含む)、オプションとして 指数部が続きます。 指数部は 'e' または 'E' の後に一つ以上の数字が続く形式です。

最初の式が文字列の場合、変数の型は2番目の式に依存します。


$foo = 1 + "10.5";              // $foo は double です (11.5)
$foo = 1 + "-1.3e3";            // $foo は double です (-1299)
$foo = 1 + "bob-1.3e3";         // $foo は integer です (1)
$foo = 1 + "bob3";              // $foo は integer です (1)
$foo = 1 + "10 Small Pigs";     // $foo は integer です (11)
$foo = 1 + "10 Little Piggies"; // $foo は integer です (11)
$foo = "10.0 pigs " + 1;        // $foo は integer です (11)
$foo = "10.0 pigs " + 1.0;      // $foo は double です (11)     
     

この変換に関する詳細は、UNIXマニュアルstrtod(3) を参照下さい。

本節の例を試したい場合、その例をカットアンドペーストしてから 動作を確認するために次の行を挿入して下さい。


echo "\$foo==$foo; type is " . gettype ( $foo ) . "<br>\n";