Re: [PHP-DEV] Deprecated functions

[email protected] (Tjerk Meesters)
Newsgroups php.internals
Message-ID <[email protected]>
Hi Alex,

On 10 Sep 2014, at 13:59, Alexander Lisachenko <[email protected]> wrote:

> Hi!
> 
> Maybe it will be better to do this in another way: introduce an RFC to
> add 'deprecated' keyword into the syntax like 'final' or 'protected'.
> There are many frameworks that want to deprecate some methods or
> classes. Currently it's only possible via "@deprecated" tag in the
> phpDoc-block, but this tag doesn't influence on method invocation, so
> no warnings are generated.

Any decent IDE should tell you that a function is deprecated by observing DocBlock; I believe PhpStorm uses strike-through to indicate deprecated functionality.

> 
> Symfony uses trigger_error($message, E_USER_DEPRECATED) explicitly in
> deprecated methods to trigger this warning (see
> https://github.com/symfony/symfony/pull/6180), but this is not a
> transparent solution.

I agree that having a ‘deprecated’ keyword would simplify matters, but I don’t think that alone is worth making it a language feature.

This could be a good case for annotations, though, if we ever get such a thing :)

> 
> This can be look like this:
> 
> class Test {
>    deprecated protected $someProperty;
> 
>    deprecated public function foo() {}
>    public function bar() {}
> }
> 
> 
> deprecated class OldStuff {}
> 
> deprecated function someOldFunction() {}
> 
> This RFC will give more control over 'deprecated' functionality and
> can be easily tested.
> 
> Thoughts?
> 
> 2014-09-10 9:42 GMT+04:00 Tjerk Meesters <[email protected]>:
>> 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?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.