私はちょうど 3v4l からの小さな PHP スニペットに直面しました:https://3v4l.org/jmrZB
echo 1...1; //10.1
そして、その結果をどう説明すればいいのか、私には全くわかりません。なぜこれが有効だと考えられるのでしょうか?
ベストアンサー1
.
PHP ではドット ( ) には 2 つの役割があります。
- 実数の一部である場合の小数点として、例
1.1
:実数では整数部と小数部の両方がオプションです。しかし同時にではないつまり、 と はどちらも1.
PHP.1
では有効な実数ですが、.
は数値ではありません。 - として文字列連結演算子この演算子は、2 つの文字列部分式を 1 つの大きな式に結合します。大きな式の値は、部分式の文字列値を連結したものです。文字列でない部分式は、連結前に文字列に変換されます。
たとえば、1 . 1
は と同じであり'1' . '1'
、その値は文字列 です'11'
。
この式1...1
は として解析されます1. . .1
。前述のとおり、1.
と は.1
実数 (1.0
および0.1
) であり、中央のドット ( .
) は文字列連結演算子です。
数値を文字列に変換する場合、PHP はこの操作に必要な最小限の文字数を使用します。実数が整数部分のみを持つ場合、小数点や小数点のない整数として数値を表します。
1. . .1
これが、 が と同じであり'1' . '0.1'
、式の最終的な値が である理由です10.1
。
なぜ1...1
このように解析されるのでしょうか?
パーサーは式を左から右に読み取ります。1
は、そこから数値が始まることを伝えます。1.
は有効な実数ですが、1..
そうではありません。 は数値として保持され1.
、次のドットは連結演算子です。次の は.
、数字が続き、別の実数 ( .1
) の始まりです。
全体としては、1...1
と同じです1. . .1
。