Aşağıdaki kodu var karıştı Eko? Ek, parantez içine alındığında iyi görünüyor.PHP
Her yerde bu tuhaf davranış belgelendi mi?
Aşağıdaki kodu var karıştı Eko? Ek, parantez içine alındığında iyi görünüyor.PHP
Her yerde bu tuhaf davranış belgelendi mi?
Hem operatörler ilave +
operatörü ve birleştirme .
operatör operator precedence aynı var, ama onlar ilişkisel bırakılır beri aşağıdaki gibi değerlendirilir olsun: Birinci ve uçları
echo (("sum:" . $a) + $b);
echo ("sum:" . ($a + $b));
Yani ilk satır yok birleştirme kadar olan: (Şimdi bu sayısal bağlam olduğundan
"sum: 1" + 2
senin string gets converted to an integer ve böylece daha sonra verir 0 + 2
, ile bitirmek 2
sonuçlanır.)
[Teknik olarak eşit önceliğe sahiptirler] (http://php.net/manual/en/language.operators.precedence.php) bu yüzden her şey birleşikliğe düşer. –
@Michael bunu işaret ettiğin için teşekkürler! Yanıt güncellendi – mgibsonbr
Eğer PHP operator precedence listeleme sayfasına baktığınızda ise, birleştirme operatörü .
ve toplama operatörü +
sol çağrışımsal ile eşit önceliğe sahip olduğunu göreceksiniz. Bu, işlemlerin tam olarak kodun gösterdiği gibi soldan sağa yapıldığı anlamına gelir.
$output = "sum: " . $a;
echo $output, "\n";
$output = $output + $b;
echo $output, "\n";
Bu aşağıdaki çıktıyı verir:
sum: 1
2
birleştirme çalışmalarını, ancak daha sonra sayı 2
dizesi sum: 1
eklemeyi deneyin Şuna bakalım. Strings that don't start with a number evaluate to 0
, bu nedenle 0 + 2
'a eşdeğerdir, bu da 2
ile sonuçlanır.
Sorunuzda önerdiğiniz gibi çözüm, ekleme işlemlerini parantez içine almak, böylece birlikte yürütülür ve bu işlemlerin sonucu birleştirilir.
echo "sum: " . ($a + $b);
Eğer birleştirme gelen ek ayırmak için virgül kullanabilirsiniz echo
dil yapısı kullanmak beri:
echo "sum: " , $a + $b;
İşleri beklendiği gibi.
Sorunuz yanıtlandıysa, cevabı kabul edebilirsiniz. Bu, sorunun çözüldüğünü belirtir. – lonesomeday