RE: Execution order of PHP

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Sándor Tamás

> 2010.03.10. 14:41 keltezéssel, Bob McConnell írta:
>> From: Auke van Slooten
>>
>>> In a hobby project I'm relying on the order in which the following
>>>      
>> piece
>>    
>>> of PHP code is executed:
>>>
>>> $client->system->multiCall(
>>>     $client->methodOne(),
>>>     $client->methodTwo()
>>> );
>>>
>>> Currently PHP always resolves $client->system (and executes the __get
>>>      
>> on
>>    
>>> $client) before resolving the arguments to the multiCall() method
>>>      
>> call.
>>    
>>> Is this order something that is specified by PHP and so can be relied
>>> upon to stay the same in the future or is it just how it currently
>>>      
>> works.
>>    
>>> If it cannot be relied upon to stay this way, I will have to rewrite
>>>      
>> the
>>    
>>> multiCall method and API...
>>>      
>> Think about it from the parser's point of view. It has to evaluate
>> $client->system to determine the parameter list for multiCall(). Then it
>> has to evaluate those parameters before it can stuff their values into
>> the stack so it can call the function. But, whether it evaluates the
>> parameter list left-to-right or vice versa is implementation dependent.
>> I don't believe you can rely on it always being the same unless you
>> always use the same interpreter.
>    
> I think it cannot be that the evaluation order of the parameters is 
> implementation dependent.
> Just think about it:
>    $someobject->method($a++, $a++);
> 
> What will be the result? Or there has to be some directive to tell the 
> parser to evaluate the parameters from left to right or vice versa.
> And if there isn't, in some future release, there has to be.

The result of that line would be undefined in any language I am familiar with. I could manually implement a variation in assembler that would be safe, but nowhere else. You have too many operations in a row on a single variable without adequate checkpoints between them.

Bob McConnell

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux