Herkes PHP mantık bu imkansız biraz açıklayabilir misiniz?

4 Cevap php

Ben basit bir PHP komut dosyası hata ayıklama çalışılıyor. Esasen, ile tanımlanan bir değişken var:

$variable = ($_GET['variable'] == 'true') ? TRUE : FALSE;

Sonra, görünüm dosyasında, aşağıdaki kodu $ değişken == TRUE ise bir kutu görüntülemek içindir:

<? if ($variable == true) { ?>
<p class="box">You have imported a new plan.</p>
<? } ?>

Şimdi bile o $ değişken, var_dump tarafından gösterildiği gibi, ($ değişken); == FALSE, bu HTML ise {} etiketleri arasına yazdırılır. Bana göre, bu mantığı aşıyor. Ben sadece bu sorunu çözemiyorum.

Ayrıca, bu kod belirli bir sunucu çalışan PHP5.2 dışında birçok PHP4 ve PHP5 tesisler üzerinde çalışıyor.

Olası bir öneriniz? İlanlar? Ben bunu anlamaya çalışıyorum saçımı çekerek yaşıyorum.

Teşekkür ederim.

4 Cevap

Sorun şudur:

<? if ($variable == true) { ?>

$ Değişken ya değerin 'yanlış' veya 'null' atanmamış ise PHP'nin ayrıştırma kurallarına göre, $ değişken 'gerçek' eşittir.

Non-zero/non-null/non-false olmak typecasting olabilir HERHANGİ değeri true boolean değerlendirecek gibi PHP gerçek, temelde karşılaştırmalar için işe yaramaz.

Aşağıdaki:

<?php

echo '7: ', (7 == true) ? 'true' : 'false', "\n";
echo '-1: ', (-1 == true) ? 'true' : 'false', "\n";
echo '0: ', (0 == true) ? 'true' : 'false', "\n";
echo 'null: ', (null == true) ? 'true' : 'false', "\n";
echo 'true: ', (true == true) ? 'true' : 'false', "\n";
echo 'abc: ', ('abc' == true) ? 'true' : 'false', "\n";
echo 'array: ', (array() == true) ? 'true' : 'false', "\n";

in sonuçları:

7: true
-1: true
0: false
null: false
true: true
abc: true
array: false

First read this: http://www.php.net/manual/en/language.types.boolean.php

Bu Burada gerçeğin iki versiyonu var gibi geliyor bana. İlk adım, $ _GET ['değişken'] değeri string 'gerçek' arıyor ve $ değişken sürekli bir atama olduğunu bulmak. Dizge 'gerçek' bu durumda mantıksal gerçeği ilişkisi yoktur. Dize dışında başka bir şey 'gerçek' atanan YANLIŞ sabiti neden olacaktır.

DOĞRU ve YANLIŞ php sabitleri önceden tanımlanmış.

$ Değişken kullanılması doğru veya yanlış ile karşılaştırmak gerekir. ($ Değişken) yerine eğer sadece kullanmak.

SaltLake size kısa etiketleri kontrol etmelisiniz hakkıdır. Ben alwasys güvenli olması için yerine kullanılacak.

true veya false, sadece kimlik ile eşitliği karşılaştırmak asla.

<? if ($variable) { ?>

veya

<? if ($variable === true) { ?>

Belki kısa etiketler kapalı? Kullanmayı deneyin

<?PHP if ( TRUE == $variable ) : ?>
    <p class="box">You have imported a new plan.</p>
<?PHP endif; ?>