2013-12-12 5 views
0

У меня есть некоторый код, который выглядит следующим образом:ошибка входа в PHP

$log->error('addToWatch=['.$addToWatchPage.'] success=['.$success.']');   
if(($success == 1) and ($addToWatchPage == true)) { 
    $log->error('adding to watch page');   
} else { 
    $log->error('NOT added to watch page');   
} 

Когда я запускаю его, я всегда вдаваясь в, если заявление и никогда в заявлении еще даже если $addToWatchPage является ложным. См. Мой выход в журнал ниже:

Sat Jan 26, 2013 @ 6:02 addToWatch=[false] success=[1] 
Sat Jan 26, 2013 @ 6:02 adding to watch page. 

Может ли кто-нибудь объяснить, почему это нарушено?

+3

ли '$ addToWatchPage' установлен в строку "ложной" или фактический ложное значение? 'var_dump ($ addToWatchPage)' – showdev

+0

код, который вы предоставили, не воспроизводит ошибку –

ответ

3

Возможно $addToWatchPage это строка, содержащая false, в противном случае результирующего первое регистрационное сообщение будет:

Sat Jan 26, 2013 @ 6:02 addToWatch=[] success=[1] 

Это приведет к $addToWatchPage == true времени оценивается как true, так как 'false' == true является truthy выражения (на самом деле, любой не- пустая строка, отличная от '0', верна, если она выбрана для boolean).

Убедитесь, что $addToWatchPage является логическим значением вместо строки.

$addToWatchPage = false; // correct 
$addToWatchPage = 'false'; // wrong 
0

Я думаю, это проблема строка:

if('false' == true)echo 'wtf'; 

Try литье:

$log->error("addToWatch=[$addToWatchPage] success=[$success]");   
if((int)$success === 1 && (string)$addToWatchPage === 'true') { 
    $log->error('adding to watch page');   
} 
else{ 
    $log->error('NOT added to watch page');   
} 
0

Вы должны использовать === вместо == ширина $ addToWatch

1

Вам нужно будет предоставить идентичный оператор '===' для оператора $ addToWatchPage. Ваш текущий код с '==' в основном спрашивает, содержит ли $ assToWatchPage что-нибудь. Я бы также удалил лишние скобки, но я не уверен на 100%, если это имеет значение? Я бы также использовал & & вместо этого, и хотя кто-то может захотеть объяснить о приоритете оператора.

Здесь:

$log->error('addToWatch=['.$addToWatchPage.'] success=['.$success.']');   
if($success == 1 && $addToWatchPage === true) { 
    $log->error('adding to watch page');   
} else { 
    $log->error('NOT added to watch page');   
} 

См This blog post on Triple Equals