PHP Variable Comparison

Important notes on the comparisons and tests:

There appear to be two null values at the start of the test. The first one is actually an unset variable, i.e. no longer in existence. The second is a variable which was set to null.

Tests with Ctype and strcmp-type functions use the system default C locale. Results may vary for other locales.

Some tests might seem a bit ‘silly’, for instance testing with === 'null'. The reason for adding these tests can be divided into two categories:

Data received from databases and $_POST/$_GET/etc variables are always received as strings (unless a potentially used database abstraction layer changes this). So sometimes testing for a string value where a non-string variable type would be more logical, can actually make sense.

Some are unfortunately regularly encountered in code and added here to illustrate why not to use them.

BEWARE: some variable changing functions will not return a changed value, but will return whether the changing succeeded. You will find this indicated in the function header by the use of $copy (as the test will use a copy of the variable to not influence the other tests in the same table).

Notes on some variables:

Some of the test variables used, do not print the way they are set, either because they contain invisible characters or because they result in something else, so for your convenience, these are outlined here:

†

How the variable is defined:

i8

$x = 0xCC00F9; // Hexadecimal integer.

i9

$x = 052; // Octal integer.

ia

$x = 0b0111001; // Binary integer (PHP5.4+).

ib

$x = ‏௫‏; // Tamil digit five - entered as string as PHP itself cannot deal with it as an integer.

$x = ⅕; // Unicode character representing 1/5 - entered as string as PHP itself cannot deal with it as a float.

sk

$x = "123, \"str\"\r\n";

sn

$x = "\f\t\r\n";

sp

$x = "\x7f\t\r\n"

Legend / How to use the tables:

The error level for this test sheet has been set to E_ALL & ~E_STRICT. All errors are caught and referenced (with #links) in the tables with details of the error messages (if any) below each table. Similar error messages are grouped together for your convenience.

Some column labels have been shortened to avoid them taking undue space. These are indicated by a …. If you mouse-over the column label you will see the full variable/test information.

In comparison tables, the left-top table header will indicate the comparison used and link to the relevant page in the PHP Manual.

In test tables, the left top table header indicates the type of tests. Both this header as well as most column headers link to their respective relevant PHP Manual pages.

A ‡ with a number next to a column header means there is a (linked) footnote for that entry at the bottom of the page.

When you mouse-over the table the row and column you are at are highlighted. To help you compare specific columns/rows, you can click on any cell to mark the column and row which the cell intersects for extra highlighting. Click again to remove this sticky highlight.

Legend to the color coding

NULL:

null

Boolean:

true
/ false

Integer:

123456789
/ 0

Float:

12345.6789

String:

‘A string’

Array and Object:

Indicated as such. Array keys, array values and object properties will be color coded according to the coding shown here.