From:             
Operating system: Any
PHP version:      Irrelevant
Package:          Scripting Engine problem
Bug Type:         Feature/Change Request
Bug description:Context call feature

Description:
------------
I'd like to propose an extension to PHP syntax, that would allow programmer
to 
avoid code duplication in some cases and, therefore, would make PHP code
more 
readable.

My idea is to extend dynamic call operator ("->method()") add a "context"
syntax 
to it's arguments. The syntax would mean that the argument's value is
located in 
context of a specific object - the argument is either a property or method.
The 
syntax could be as follows:

$obj->area( :$x, :$y);

Note the ":" (colon) character in front of argument. The colon means that
the 
argument for the call is a property of object that the invoked method
belongs 
to. In this case both arguments are actually "$obj->x" and "$obj->y"
values. 
Syntax for method calls is as follows:

$obj->area( :x(), :y());

In this case both arguments are "$obj->x()" and "$obj->x()".

The following more complex example:

$obj->area( :mt_rand( 1, :$x), $y);

Here mt_rand() is a method of $obj (i.e. "$obj->mt_rand()", because colon 
character is preceding the function name)) and since ":mt_rand()" is
resolved to 
"$obj->mt_rand()", it's ":$x" argument is resolved to "$obj->x" as well.

However, a call like this:

mt_rand( :$x);

should yield a runtime error because this is not a dynamic call and the
argument 
can not be resolved.



Test script:
---------------
class Test {

        public $x =5;
        
        public function y() {
                return 10;
        }

        public function area( $x, $y, $name) {
                echo $name .': ' .$x .' x ' .$y;
        }
        
        public function makeName( $name) {
                return '#' .$name;
        }
}

$test =new Test;
$test->area( :$x, :y(), :makeName( 'test'));

Expected result:
----------------
#test: 5 x 10

Actual result:
--------------
Not implemented yet.

-- 
Edit bug report at https://bugs.php.net/bug.php?id=60372&edit=1
-- 
Try a snapshot (PHP 5.4):            
https://bugs.php.net/fix.php?id=60372&r=trysnapshot54
Try a snapshot (PHP 5.3):            
https://bugs.php.net/fix.php?id=60372&r=trysnapshot53
Try a snapshot (trunk):              
https://bugs.php.net/fix.php?id=60372&r=trysnapshottrunk
Fixed in SVN:                        
https://bugs.php.net/fix.php?id=60372&r=fixed
Fixed in SVN and need be documented: 
https://bugs.php.net/fix.php?id=60372&r=needdocs
Fixed in release:                    
https://bugs.php.net/fix.php?id=60372&r=alreadyfixed
Need backtrace:                      
https://bugs.php.net/fix.php?id=60372&r=needtrace
Need Reproduce Script:               
https://bugs.php.net/fix.php?id=60372&r=needscript
Try newer version:                   
https://bugs.php.net/fix.php?id=60372&r=oldversion
Not developer issue:                 
https://bugs.php.net/fix.php?id=60372&r=support
Expected behavior:                   
https://bugs.php.net/fix.php?id=60372&r=notwrong
Not enough info:                     
https://bugs.php.net/fix.php?id=60372&r=notenoughinfo
Submitted twice:                     
https://bugs.php.net/fix.php?id=60372&r=submittedtwice
register_globals:                    
https://bugs.php.net/fix.php?id=60372&r=globals
PHP 4 support discontinued:          
https://bugs.php.net/fix.php?id=60372&r=php4
Daylight Savings:                    https://bugs.php.net/fix.php?id=60372&r=dst
IIS Stability:                       
https://bugs.php.net/fix.php?id=60372&r=isapi
Install GNU Sed:                     
https://bugs.php.net/fix.php?id=60372&r=gnused
Floating point limitations:          
https://bugs.php.net/fix.php?id=60372&r=float
No Zend Extensions:                  
https://bugs.php.net/fix.php?id=60372&r=nozend
MySQL Configuration Error:           
https://bugs.php.net/fix.php?id=60372&r=mysqlcfg

Reply via email to