无论操作数和运算符如何,PHP MySQL比较总是如此

For the record, I read documentation on boolean comparisons in PHP, but I do not understand how my code relates in this context. I thought I had a problem connecting to MySQL, but it turns out everything is fine and I can make queries without issue. So, MySQL is not really that relevant to this post.

I use this to report errors in an object that tried to connect on construction. Note that I tried ==, ===, != and !== only to get the same problem. I even tried casting the argument to bool and boolean.

Comments in below code blocks are relevant.

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());
        }
    }
}

Connecting is typical.

$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() says everything is ok, but assert() stops the presses no matter what.

I tried every operator and cast combination, even renaming the function out of paranoia over a name clash. Why does assert() only see true?

EDIT:

To make my problem clearer, consider the alternative implementation with Eugen's suggested use of is_resource. The problem is that I just have no idea why the below happens.

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 />";
    }
}

Output is out of order and the value changed after one comparison. Since I can make queries, $test must be true. I should not get output at all, but I do for every operator. I also tried it with FALSE replaced by 0.

Bad PHP instance?

1 !== false
=== false
!== false
!= false
$this->assert(is_resource($this->con));

can't you use your second example and combine the function? you already get a value (yay/nay)

$this->con = mysql_connect($host, $un, $pw, false, $ssl ? MYSQL_CLIENT_SSL : 0);
$this->assert = mysql_ping($this->con) ? 1 : 0;

just thinking out loud