2017-07-13 5 views
3

で文字をインクリメントすることができますは、なぜあなたは、このような文字をインクリメントすることができますPHPでPHP

$b = 'a'++; 

私は疑問に思ってすることは、言語の立場から、なぜその仕事をしますか? PHPは文字をASCII値と解釈するので、インクリメントするとASCII値が1になり、アルファベットの次の文字になりますか?

+0

いいえ、それは考えです – Kai

+2

そのようなリテラル「a」をインクリメントすることはできません。構文エラーです。 '$ a = 'a' 'を代入してから' $ b = $ a ++ 'を実行しても、' $ b'に代入される値はプリインクリメント値になります。 (私はそれが質問のポイントの横にあるのは分かっていると知っています) –

答えて

3

チェックこのアウト:http://php.net/manual/en/language.operators.increment.php

PHP文字変数ではなくC年代に算術演算を扱う際にPerlの規則に従います。

たとえば、PHPおよびPerl $ a = 'Z'; $ a ++; C a = 'Z'の間に$ aを 'AA'に変えます。 a ++; aを '['( 'Z'のASCII値は90、 '['のASCII値は91)になります。

文字変数はインクリメントされますが、デクリメントされることはなく、プレーンなASCIIアルファベットと数字(a-z、A-Z、0-9)だけがサポートされます。他の文字変数をインクリメント/デクリメントしても効果はありません。元の文字列は変更されません。

+0

使い方の良いチュートリアルです。私はそれがなぜ機能するのだろうと思いますか?言語が設計されたやり方と関係しているのか、フードの下に追加された機能なのか –

+0

PHPは少なくとも部分的に[CGI.pm](http:// perldoc .perl.org/CGI.html)ので、戦略的にはPerlと同じ機能を多数備えています。 –

0

質問:私は言語の観点から疑問があるのはなぜですか?

A:アラビア語を右から左に書くと、英語は左から右に書かれているのはなぜですか?それは、その言語を設計した人々によってなされた決定でした。彼らはそうする独自の理由があるかもしれません。私は、これが設計上、算術加算($ a + 1)をしても同じように動作しないかのように強く信じています。

$a = 'a'; 

echo $a++; // output: 'a' , a is echoed and then incremented to 'b' 
echo ++$a; // output: 'c' , $a is already 'b' and incremented first and then becomes 'c' 

echo $a+1; // output: '1' , When in an arathamatic operation a string value is considered 0 

// in short '++' seems to have been given special intrepretation with string 
// which is equivalent to 
echo $a = chr(ord($a)+1); // output: 'd' , the ascii value is incremented 

質問をいただきありがとうございます。私は、「++」が文字列に適用可能であることに気づいていませんでした。

関連する問題