Deprecated Features
PHP Core
Changes to user output handler
Trying to produce output (e.g. with echo) within
a user output handler is deprecated.
The deprecation warning will bypass the handler producing the output to
ensure it is visible; if there are nested output handlers the next
one will still be used.
Non-canonical cast names
Non-canonical cast names (boolean),
(integer), (double),
and (binary) have been deprecated,
use (bool), (int),
(float), and (string) respectively.
Terminating case statements with a semicolon
Terminating case statements with a semicolon instead of a colon has
been deprecated.
Returning null from __debugInfo()
Returning null from
__debugInfo()
has been deprecated. Return an empty array instead.
report_memleaks INI directive
The report_memleaks INI directive
has been deprecated.
Constant redeclaration
Constant redeclaration has been deprecated.
Note that this already generated a warning and will continue to do so.
Closure binding issues
The following closure binding issues, which already emit an
E_WARNING, are now deprecated:
- Binding an instance to a static closure.
- Binding methods to objects that are not instances of the class
(or subclass) that the method is defined.
- Unbinding $this from a method.
- Unbinding $this from a closure that uses `$this`.
- Binding a closure to the scope of an internal class.
- Rebinding the scope of a closure created from a function or method.
__sleep() and __wakeup() magic methods
The __sleep() and
__wakeup() magic methods
have been soft-deprecated.
The __serialize() and
__unserialize() magic
methods should be used instead, or at the same time if compatibility
with PHP 7 is required.
Using null as an array offset
Using null as an array offset or when calling array_key_exists
is now deprecated. Instead an empty string should be used.
Incrementing non-numeric strings
Incrementing non-numeric strings is now deprecated.
Instead the str_increment function should be used.
register_argc_argv INI directive
Deriving $_SERVER['argc'] and $_SERVER['argv']
from the query string for non-CLI SAPIs has been deprecated.
Configure register_argc_argv=0 and switch to either
$_GET or $_SERVER['QUERY_STRING']
to access the information, after verifying that the usage is safe.
cURL
The curl_close function has been deprecated,
as CurlHandle objects are freed automatically.
The curl_share_close function has been deprecated,
as CurlShareHandle objects are freed automatically.
Date
The DATE_RFC7231 and
DateTimeInterface::RFC7231 constants have been deprecated.
This is because the associated timezone is ignored and always uses GMT.
FileInfo
The finfo_close function has been deprecated.
As finfo objects are freed automatically.
The $context parameter of the
finfo_buffer function has been deprecated
as it is ignored.
GD
The imagedestroy function has been deprecated,
as GdImage objects are freed automatically.
Hash
The MHASH_* constants have
been deprecated.
Intl
The intl.error_level INI setting
has been deprecated.
Errors should either be checked manually or exceptions should be enabled by
using the intl.use_exceptions
INI setting.
LDAP
Specific Oracle Instant Client calls and constants have been deprecated.
List of affected calls:
- ldap_connect with wallet support
- ldap_connect_wallet
List of affected constants:
GSLC_SSL_NO_UATH
GSLC_SSL_ONEWAY_UATH
GSLC_SSL_TWOWAY_UATH
MySQLi
The mysqli_execute alias function has been deprecated.
Use mysqli_stmt_execute instead.
OpenSSL
The $key_length parameter for
openssl_pkey_derive has been deprecated.
This is because it is either ignored, or truncates the key, which can be
a security vulnerability.
PDO
The "uri:" DSN scheme has been deprecated due to security concerns with
DSNs coming from remote URIs.
Driver specific constants in the PDO class have been deprecated.
List of affected constants and their replacement:
PDO::DBLIB_ATTR_CONNECTION_TIMEOUT => Pdo\Dblib::ATTR_CONNECTION_TIMEOUT
PDO::DBLIB_ATTR_QUERY_TIMEOUT => Pdo\Dblib::ATTR_QUERY_TIMEOUT
PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIER
PDO::DBLIB_ATTR_VERSION => Pdo\Dblib::ATTR_VERSION
PDO::DBLIB_ATTR_TDS_VERSION => Pdo\Dblib::ATTR_TDS_VERSION
PDO::DBLIB_ATTR_SKIP_EMPTY_ROWSETS => Pdo\Dblib::ATTR_SKIP_EMPTY_ROWSETS
PDO::DBLIB_ATTR_DATETIME_CONVERT => Pdo\Dblib::ATTR_DATETIME_CONVERT
PDO::FB_ATTR_DATE_FORMAT => Pdo\Firebird::ATTR_DATE_FORMAT
PDO::FB_ATTR_TIME_FORMAT => Pdo\Firebird::ATTR_TIME_FORMAT
PDO::FB_ATTR_TIMESTAMP_FORMAT => Pdo\Firebird::ATTR_TIMESTAMP_FORMAT
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => Pdo\Mysql::ATTR_USE_BUFFERED_QUERY
PDO::MYSQL_ATTR_LOCAL_INFILE => Pdo\Mysql::ATTR_LOCAL_INFILE
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY => Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY
PDO::MYSQL_ATTR_INIT_COMMAND => Pdo\Mysql::ATTR_INIT_COMMAND
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => Pdo\Mysql::ATTR_MAX_BUFFER_SIZE
PDO::MYSQL_ATTR_READ_DEFAULT_FILE => Pdo\Mysql::ATTR_READ_DEFAULT_FILE
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => Pdo\Mysql::ATTR_READ_DEFAULT_GROUP
PDO::MYSQL_ATTR_COMPRESS => Pdo\Mysql::ATTR_COMPRESS
PDO::MYSQL_ATTR_DIRECT_QUERY => Pdo\Mysql::ATTR_DIRECT_QUERY
PDO::MYSQL_ATTR_FOUND_ROWS => Pdo\Mysql::ATTR_FOUND_ROWS
PDO::MYSQL_ATTR_IGNORE_SPACE => Pdo\Mysql::ATTR_IGNORE_SPACE
PDO::MYSQL_ATTR_SSL_KEY => Pdo\Mysql::ATTR_SSL_KEY
PDO::MYSQL_ATTR_SSL_CERT => Pdo\Mysql::ATTR_SSL_CERT
PDO::MYSQL_ATTR_SSL_CA => Pdo\Mysql::ATTR_SSL_CA
PDO::MYSQL_ATTR_SSL_CAPATH => Pdo\Mysql::ATTR_SSL_CAPATH
PDO::MYSQL_ATTR_SSL_CIPHER => Pdo\Mysql::ATTR_SSL_CIPHER
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERT
PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY => Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY
PDO::MYSQL_ATTR_MULTI_STATEMENTS => Pdo\Mysql::ATTR_MULTI_STATEMENTS
PDO::ODBC_ATTR_USE_CURSOR_LIBRARY => Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY
PDO::ODBC_ATTR_ASSUME_UTF8 => Pdo\Odbc::ATTR_ASSUME_UTF8
PDO::ODBC_SQL_USE_IF_NEEDED => Pdo\Odbc::SQL_USE_IF_NEEDED
PDO::ODBC_SQL_USE_DRIVER => Pdo\Odbc::SQL_USE_DRIVER
PDO::ODBC_SQL_USE_ODBC => Pdo\Odbc::SQL_USE_ODBC
PDO::PGSQL_ATTR_DISABLE_PREPARES => Pdo\Pgsql::ATTR_DISABLE_PREPARES
PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES => Pdo\Sqlite::ATTR_EXTENDED_RESULT_CODES
PDO::SQLITE_ATTR_OPEN_FLAGS => Pdo\Sqlite::OPEN_FLAGS
PDO::SQLITE_ATTR_READONLY_STATEMENT => Pdo\Sqlite::ATTR_READONLY_STATEMENT
PDO::SQLITE_DETERMINISTIC => Pdo\Sqlite::DETERMINISTIC
PDO::SQLITE_OPEN_READONLY => Pdo\Sqlite::OPEN_READONLY
PDO::SQLITE_OPEN_READWRITE => Pdo\Sqlite::OPEN_READWRITE
PDO::SQLITE_OPEN_CREATE => Pdo\Sqlite::OPEN_CREATE
Driver specific methods in the PDO class have been deprecated.
List of affected methods and their replacement:
- PDO::pgsqlCopyFromArray => Pdo\Pgsql::copyFromArray
- PDO::pgsqlCopyFromFile => Pdo\Pgsql::copyFromFile
- PDO::pgsqlCopyToArray => Pdo\Pgsql::copyToArray
- PDO::pgsqlCopyToFile => Pdo\Pgsql::copyToFile
- PDO::pgsqlGetNotify => Pdo\Pgsql::getNotify
- PDO::pgsqlGetPid => Pdo\Pgsql::getPid
- PDO::pgsqlLOBCreate => Pdo\Pgsql::lobCreate
- PDO::pgsqlLOBOpen => Pdo\Pgsql::lobOpen
- PDO::pgsqlLOBUnlink => Pdo\Pgsql::lobUnlink
- PDO::sqliteCreateAggregate => Pdo\Sqlite::createAggregate
- PDO::sqliteCreateCollation => Pdo\Sqlite::createCollation
- PDO::sqliteCreateFunction => Pdo\Sqlite::createFunction
PDO_PGSQL
Constants related to transaction states have been deprecated as this feature is unavailable with PDO:
PDO::PGSQL_TRANSACTION_IDLE
PDO::PGSQL_TRANSACTION_ACTIVE
PDO::PGSQL_TRANSACTION_INTRANS
PDO::PGSQL_TRANSACTION_INERROR
PDO::PGSQL_TRANSACTION_UNKNOWN
Reflection
The setAccessible() methods of various Reflection objects have been
deprecated, as those no longer have an effect.
Calling ReflectionClass::getConstant for constants
that do not exist has been deprecated.
Calling ReflectionProperty::getDefaultValue for
properties without default values has been deprecated.
SPL
Unregistering all autoloaders by passing the
spl_autoload_call function as a callback argument to
spl_autoload_unregister has been deprecated.
Instead if this is needed, one should iterate over the return value of
spl_autoload_functions and call
spl_autoload_unregister on each value.
The SplObjectStorage::contains,
SplObjectStorage::attach, and
SplObjectStorage::detach methods have been deprecated
in favour of SplObjectStorage::offsetExists,
SplObjectStorage::offsetSet, and
SplObjectStorage::offsetUnset respectively.
Using ArrayObject and
ArrayIterator with objects has been deprecated.
Standard
The socket_set_timeout alias function has been deprecated.
Use stream_set_timeout instead.
Passing null to readdir,
rewinddir, and closedir
to use the last opened directory has been deprecated.
Provide the last opened directory explicitly instead.
Passing integers outside the interval [0, 255] to chr
is now deprecated.
This is because a byte can only hold a value within this interval.
Passing a string which is not a single byte to ord
is now deprecated, this is indicative of a bug.
The locally predefined variable
$http_response_header
is deprecated. Instead one should call the
http_get_last_response_headers function.
XML
The xml_parser_free function has been deprecated,
as XMLParser objects are freed automatically.