Re: Deprecated functions
| From: | Chris Wright | Date: | Wed, 10 Sep 2014 09:20:47 +0000 |
| Subject: | Re: Deprecated functions | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-77134@lists.php.net to get a copy of this message | ||
On 10 September 2014 06:42, Tjerk Meesters <tjerk.meesters@gmail.com> wrote:
> Hi,
>
> When I was fixing test cases on my
kill-ereg branch I noticed a
> Reflection test case for ReflectionFunction::isDeprecated().
>
> The problem with such a test case is that you’d be chasing deprecated functions to tests
> against as we move along; this is the current list of deprecated functions as taken from a typical
> 5.4 installation:
>
> Since 4.1.0: call_user_method, call_user_method_array
> Since 4.3.7: mysql_list_tables, mysql_listtables
> Since 5.3 : ereg, ereg_replace, eregi, eregi_replace, split, spliti, sql_regcase,
> mysql_db_query, magic_quotes_runtime, set_magic_quotes_runtime, set_socket_blocking
> Since 5.4 : mysql_list_dbs
>
> The above are, as far as I’m concerned, all potential candidates for removal in PHP 7, so in
> order to reliably test a deprecated function I would suggest introducing a hidden function with this
> signature:
>
> void __deprecated__() { }
>
> And mark that function as eternally deprecated using the ZEND_ACC_DEPRECATED flag.
>
> Thoughts?
An alternative could be this:
--FILE--
<?php
error_reporting(E_DEPRECATED);
foreach (get_defined_functions()['internal'] as $func) {
$ref = new \ReflectionFunction($func);
if ($ref->isDeprecated()) {
$func();
break;
}
}
?>
--EXPECTF--
Deprecated: Function %s() is deprecated in %s on line %d
...although arguably this is testing the error rather than the
reflection function. This also assumes that there will always be at
least one deprecated function in the standard library, although I
doubt this is likely to be an issue any time soon.