Для справки, я читаю документацию по логическим сравнениям в PHP, но я не понимаю, как мой код связан с этим контекстом.Я думал, что у меня была проблема с подключением к MySQL, но оказалось, что все в порядке, и я могу делать запросы без проблем.Таким образом, MySQL на самом деле не имеет отношения к этому сообщению.
Я использую это, чтобы сообщать об ошибках в объекте, который пытался подключиться при создании.Обратите внимание, что я пытался ==, ===,! = И! == только чтобы получить ту же проблему.Я даже пытался привести аргумент к bool и boolean.
Комментарии в следующих блоках кода имеют отношение.
private function assert($test){ // Tried renaming in case PHP was funny about it.
if ($test === FALSE){ // Tried ==, ===, !== and != and casting $test.
if ($this->use_exception){
throw new mysql_exception();
}else{
die("MySQL ".mysql_errno()." - ".mysql_error());
}
}
}
Подключение типично.
$this->con = mysql_connect($host, $un, $pw, false, $ssl ? MYSQL_CLIENT_SSL : 0);
// I get 'yay'
echo mysql_ping($this->con) ? "yay" : "nay";
// This disagrees. Tried no cast, and a cast to bool.
$this->assert((boolean)($this->con != FALSE));
mysql_ping ()говорит, что все в порядке, но assert () останавливает нажатия, несмотря ни на что.
Я перепробовал каждую комбинацию оператора и приведения, даже переименовывая функцию из паранойи в столкновение с именем.Почему assert () видит только true?
РЕДАКТИРОВАТЬ:
Чтобы прояснить мою проблему, рассмотрим альтернативную реализацию с предложением Eugen's is_resource.Проблема в том, что я просто понятия не имею, почему происходит следующее.
private function assert($test){
$test = $test ? true : false;
if ($test === FALSE){
echo "$test === false<br />";
}
if ($test == FALSE){
echo "$test == false<br />";
}
if ($test !== FALSE){
echo "$test !== false<br />";
}
if ($test == FALSE){
echo "$test != false<br />";
}
}
Вывод не в порядке, и значение изменилось после одного сравнения.Так как я могу делать запросы, $ test должен быть истинным.Я не должен получать вывод вообще, но я делаю для каждого оператора.Я также попробовал это с заменой FALSE на 0.
Bad PHP instance?
1 !== false
=== false
!== false
!= false