Edit report at https://bugs.php.net/bug.php?id=28261&edit=1

 ID:                 28261
 Comment by:         info at strictcoding dot co dot uk
 Reported by:        Philippe dot Jausions at 11abacus dot com
 Summary:            Lifting reserved keyword restriction for method
                     names
 Status:             Open
 Type:               Feature/Change Request
 Package:            Scripting Engine problem
 Operating System:   *
 PHP Version:        *
 Block user comment: N
 Private report:     N

 New Comment:

+1 for this feature request!


Previous Comments:
------------------------------------------------------------------------
[2011-07-10 19:47:43] [email protected]

The patch seems not to work with tokenizer extension - the extension returns 
wrong 
tokens (T_EVAL instead of expected T_STRING).

------------------------------------------------------------------------
[2009-06-30 05:52:23] taufiq at krimnet dot com

I need this bug to be resolved.

I'm writing Javascript/CSS collector & minify library. 

I would like to code like below.

JS::include(FILE_PATH)->include(FILE_PATH2)->include(FILE_PATH3);

having method name other than include() is pretty annoying.

------------------------------------------------------------------------
[2007-12-16 00:46:09] kentfredric at gmail dot com

At the moment (5.2.3 ) this is perfectly valid.

Class A{
  function __call( $function, $args ){
     if( $function == 'print' ){
        print "MyPrint: {$args[0]}";
      }
   }
}
$a = new A();
$a->print( "hello" ); #<-- surprisingly, this is not an invalid use of a 
keyword to the lexer. 
  # >> MyPrint: hello

but this

Class A{
  function print( $args ){
        print "MyPrint: {$args}";
   }
}
$a = new A();
$a->print( "hello" );

Yields a parse error "Parse error: syntax error, unexpected T_PRINT, expecting 
T_STRING"

which appears to be an illogical design contstraint. 

I've seen rather brutal slander for people attempting to perform this ( #14178 
, this bug ) amounting to "hey, you suck, dont do that" without any rational 
explanation.

So yes, I look forward to this feature being integrated.

------------------------------------------------------------------------
[2007-10-05 02:13:49] [email protected]

as new reserved words are introduced, they tend to clash with existing class's 
method names.  import and namespace are particularly nasty examples of methods 
that are likely to clash, although I have also run into problems with "list" 
which is a very nice method name for many tasks.

The patches linked to in this comment provides a simple and effective means of 
allowing reserved words in method names.  Not only is it possible, but it is 
quite elegant :).

It also fixes, as a side effect, a bug in the parsing of this code:

<?php
class A {
var $list;
}
$a = new A;
$a->list = 1;
$a-> list = 2; // parse error, unexpected T_LIST
?>

whitespace between T_OBJECT_OPERATOR and the variable name changes the token 
returned from T_STRING to any valid token.

Patch for PHP 5:
http://pear.php.net/~greg/smarter_lexer.patch.txt
Patch for PHP 6:
http://pear.php.net/~greg/php6_smarter_lexer.patch.txt

------------------------------------------------------------------------
[2004-05-04 18:18:05] [email protected]

That's simply impossible.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=28261


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=28261&edit=1

Reply via email to