PHP Karşılaştırma Operatörleri ve Veri Tipleri

1 Cevap php

Şu anda O'Reilly "Programlama PHP" aracılığıyla çalışıyorum ve "karşılaştırma operatörleri tarafından gerçekleştirilen karşılaştırma türü" başlıklı bu tabloya rastlamak var:

First Operand              | Second Operand             | Comparison
-----------------------------------------------------------------------
Number                     | Number                     | Numeric
String that is numeric     | String that is numeric     | Numeric
String that is numeric     | Number                     | Numeric
String that is not numeric | Number                     | Lexicographic
String that is numeric     | String that is not numeric | Lexicographic
String that is not numeric | String that is not numeric | Lexicographic

Karşılaştırma türü gerçekleştirildiği için Zaman kural "sadece ve sadece en az bir işlenen iki işlenen sayısal dizeleri bir sayı veya eğer sayısal" olmuştur. Bu devletler php.net page on Comparison Operators, tarafından desteklenen gibi görünüyor "Eğer bir dize ile bir tamsayı karşılaştırırsak, dize bir sayıya dönüştürülür. İki sayısal dizeleri karşılaştırmak, bunlar tamsayılar olarak karşılaştırılır."

Ancak, bu tablonun dördüncü sırada karşılaştırma "sayısal" olmalıdır olduğu anlamına gelir. Tablo bir hata içeriyor mu, ya da benim kural yanlıştır?

1 Cevap

Editted: yorumlarına dayanarak yüz hakkında tam.

Sizin özet doğru ve tablo yanlış. Bir dönüşüm bir işlenen sayısal ise dize başında sayısal biraz üzerinde denenir. Hiç sayısal lider varsa dönüştürme döner sıfır. Dönüşüm sadece tamsayılar, ondalık ve hesaplamaların rasyonel sonuçlar için gerçekleşir.

Aşağıdaki kod davranışları gösterir


if (2 > '10 little pigs')
        print 'Integer does not coerce string'."\n";
else
        print 'Integer does coerce string'."\n";

if (2.5 > '10 little pigs')
        print 'Decimal does not coerce string'."\n";
else
        print 'Decimal does coerce string'."\n";

if (5/3 > '2 little pigs')
        print 'Rational result does not coerce string'."\n";
else
        print 'Rational result does coerce string'."\n";

if (0 == 'No little pigs')
        print 'Non numeric coerced to zero'."\n";
else
        print 'Non numeric not coerced'."\n";

if (-0.156 > '-127 is a minumum value of a signed 8 bit number')
        print 'Negative decimal does coerce string'."\n";
else
        print 'Negative decimal does not coerce string'."\n";

if ('-0.156' > '-127')
        print 'Both are converted if all numeric'."\n";
else
        print 'No conversion if both are all numeric'."\n";

if ('-0.156' > '-127 is a minumum value of a signed 8 bit number')
        print 'Successful conversion of one does coerce the other'."\n";
else
        print 'Successful conversion of one does not coerce the other'."\n";