13.8. Changes in Functions
Some minor changes in functions break backward compatibility. There are countless other additions to functions and additional functions, but these do not affect compatibility between PHP 4 and PHP 5.
This function no longer accepts a non-array parameter as one of its arguments. In PHP 4, it was perfectly valid to use scalar types, like an integer or string (but not a variable representing "null"), as parameter. These types are happily included as an element in the resulting array. PHP 5 no longer supports this. If you use a scalar type, PHP 5 issues an error of type E_WARNING and return an empty array. You can see this behavior by comparing the output of this script from PHP 4 and PHP 5:
<?php $array1 = array (1, 2, 3, 4); $array2 = null; $array3 = 'non-array'; $array4 = array ('a', 'b', 'c'); print_r(array_merge($array1, $array2, $array3, $array4)); ?>
The output with PHP 4 is
Array (  => 1  => 2  => 3  => 4  => non-array  => a  => b  => c )
The output with PHP 5 is
Warning: array_merge(): Argument #2 is not an array in /13-making the-move/array_merge.php on line 7 Warning: array_merge(): Argument #3 is not an array in /13-making the-move/array_merge.php on line 7
13.8.2. strrpos() and strripos()
strrpos() and strripos() search for the last occurrence of a string inside a string in a respectively case-sensitive and case-insensitive way. In PHP 5, the full $needle is searched for in the string, searching from the end rather than the first character of this $needle string, as in PHP 4. The following example shows this:
<?php $str = "This is a short string."; var_dump(strrpos($str, "small")); ?>
In PHP 4, this returns position 16 (the index of the "s" of "string"):
In PHP 5 this returns
It is possible that more functions broke compatibility between PHP 4 and PHP 5, but they are either not known, a bug fix, or are too unimportant to be noticed.