Eğer yanlış bir cevap vererek beyanı

0 Cevap

Ifadeleri şeyleri basitleştirmek için ben uzun uzun içeride atama kullandım. Ancak bu durumda, beklendiği gibi çalışmıyor. İşte bende ne:

$Employee = GetEmployeeName($Record['employee_id']);
echo 'First name: '.$Employee['first_name'];
echo 'Last name: '.$Employee['last_name'];
echo 'Record first name: '.$Record['first_name'];
echo 'Record last name: '.$Record['last_name'];

echo 'Comparing first name: ';
var_dump(strcasecmp($Employee['first_name'], $Record['first_name']));

echo 'Comparing last name: ';
var_dump(strcasecmp($Employee['last_name'], $Record['last_name']));

echo 'Comparing both together: ';
var_dump(strcasecmp($Employee['first_name'], $Record['first_name']) 
         || strcasecmp($Employee['last_name'], $Record['last_name']));

echo 'All together now: ';
var_dump($Foo = GetEmployeeName($Record['employee_id']) 
         && (strcasecmp($Foo['first_name'], $Record['first_name']) 
             || strcasecmp($Foo['last_name'], $Record['last_name'])));

İşte sonuçlar:

First name: ZACHARY
Last name: TAYLOR
Record first name: Zachary
Record last name: Taylor
Comparing first name: int(0)
Comparing last name: int(0)
Comparing both together: bool(false)
All together now: bool(true)

Bu hiç mantıklı değil. Ilk isim karşılaştırılması 0 (yanlış) olarak giderir; soyadı karşılaştırarak 0 (yanlış) olarak giderir; onları birlikte karşılaştırarak gibi yanlış giderir. Ben eğer içine atama eklediğinizde Oysa, aniden doğru olarak giderir. Ben uzun bir süre için IFS değişkenleri atama oldum ve ben bu durum görmedim. Garip şey dışında eğer atarsanız, iyi çalışıyor, olduğunu. Yani bunu yapabilir, ama bu noktada ben dil bilgimi geliştirmek yanlış neler bulma ilkesine ilgili.

Eğer $ Çalışan doldurulur gerçeği ile görebileceğiniz gibi bu durumda atama, gerçek verir. Yani, son var_dump gibi yanlış çözmelidir, hangi temelde "true && false". Değil mi?

0 Cevap