Backward incompatible changes

Previously, it was possible for the number_format()
function to return -0. Whilst this is perfectly valid
according to the IEEE 754 floating point specification, this oddity was not
desirable for displaying formatted numbers in a human-readable form.

Previously, passing NULL to the get_class() function
would output the name of the enclosing class. This behaviour has now been
removed, where an E_WARNING will be output instead. To
achieve the same behaviour as before, the argument should simply be omitted.

Warn when counting non-countable types

An E_WARNING will now be emitted when attempting to
count() non-countable types (this includes the
sizeof() alias function).

<?php

var_dump(count(null), // NULL is not countablecount(1), // integers are not countablecount('abc'), // strings are not countablecount(new stdclass), // objects not implementing the Countable interface are not countablecount([1,2]) // arrays are countable);

The above example will output:

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
int(0)
int(1)
int(1)
int(1)
int(2)

Move ext/hash from resources to objects

As part of the long-term migration away from resources, the Hash
extension has been updated to use objects instead of resources. The change should be
seamless for PHP developers, except for where
is_resource() checks have been made (which will need
updating to is_object() instead).

Improve SSL/TLS defaults

The following changes to the defaults have been made:

tls:// now defaults to TLSv1.0 or TLSv1.1 or TLSv1.2

ssl:// an alias of tls://

STREAM_CRYPTO_METHOD_TLS_* constants default to TLSv1.0
or TLSv1.1 + TLSv1.2, instead of TLSv1.0 only

NetWare support

The bcmod() function no longer truncates fractional
numbers to integers. As such, its behavior now follows
fmod(), rather than the % operator.
For example bcmod('4', '3.5') now returns
0.5 instead of 1.