[PHP-users 29897] Re: キャラクタ演算について

KOYAMA Tetsuji koyama @ hoge.org
2006年 7月 27日 (木) 15:22:06 JST


小山です。

On 7/27/06, hosokawa <qzt05475 @ nifty.com> wrote:
> 早速の回答ありがとうございます。
> $var++; では、配列を持つ必要は、なく
> $var--; では、配列で対応するということですね。
> 可能だとは、思いますがどうも釈然としないのですが。
> アスキーコード表を配列として持つことになりますので冗長かと
> 考えております。
> PHPのバグではないかと考えたりしています。

これでバグになってしまうのでは PHP がかわいそうです。

$var = 'B';

とした場合、$var が保持するのは 'B' という文字(列) であり、
B の文字コードではありません。内部的にはもちろん文字コード
に変換した形で持っていますが、それは PHP の文法とは関係
ない話です。

$var--;

した場合、文字列をデクリメントするという意味不明な動作を
要求していることになります。 $var++ が動くのは、規定外だけどたまたま
そうなっているだけのように思います。

B の文字コードの一つ前の文字が欲しいのであれば、

$code = ord($var);
--$code;
$var = chr($code);

のように、明示的に文字コードに変換してから行うべきでしょう。

-- 
    小山哲志@ビート・クラフト
    koyama @ beatcraft.com
    koyama @ hoge.org


PHP-users メーリングリストの案内