[Phpmyadmin-devel] a PHP 5.1.2 bug?

Marc Delisle Marc.Delisle at cegepsherbrooke.qc.ca
Fri Jan 13 06:23:01 CET 2006


Sebastian Mendel a écrit :
> Marc Delisle schrieb:
> 
>>Sebastian Mendel a écrit :
>>
>>>Garvin Hicking schrieb:
>>>
>>>
>>>>Hi Marc!
>>>>
>>>>
>>>>
>>>>>Look at this sample code:
>>>>><?php
>>>>>$the_query = "INSERT INTO `aaa` (`f1`, `f2`) VALUES ('1', 'aaa')";
>>>>>preg_match('@INSERT\sINTO\s\`([^\`]+)\`@iu', $the_query,
>>>>>$error_table = array()
>>>>>);
>>>>>print_r($error_table); ?>
>>>>
>>>>It surprises me that this has ever worked :)
>>>
>>>
>>>me not!
>>>
>>>it is more than logical that this should work, as = is always evaluated
>>>first!
>>>
>>>
>>>
>>>
>>>>I guess that PHP 5.1.2 has a different way of evaluating/processing
>>>>the order of
>>>>the array assignment. But the way of specifieing an assignment within
>>>>a function
>>>>call is something I've never seen before, and also looks a bit
>>>>misleading-codewise, IMHO.
>>>>
>>>>So you might want to ask how this problem came, but I'm pretty sure
>>>>the answer
>>>>will be "It was never meant to work, so you shouldn't have relied on
>>>>it. We
>>>>fixed this because of memory corruption issues" ;-)
>>>
>>>
>>>i don't think so.
>>>
>>>why?
>>>
>>>whats the difference between
>>>
>>>function( anotherFunction() );
>>>function( $var = 'value' );
>>>
>>>???
>>>
>>>why should this not work?
>>>
>>>for example in C i often see this to clarify parameters
>>>
>>>function(true, false, true);
>>>or
>>>function($use_utf8 = true, $return = false, $escape = true);
>>>
>>>what do you think is easier to read? and why should this not work in PHP?
>>>
>>>
>>
>>Hi Sebastian,
>>
>>Please do not draw too general conclusions about what I wrote. This
>>example works in PHP 5.1.2:
>>
>>$error_table = array();
>>
>>preg_match('@INSERT\sINTO\s\`([^\`]+)\`@iu',
>>  $the_query =  "INSERT INTO `aaa` (`f1`, `f2`) VALUES ('1', 'aaa')",  
>>$error_table );
>>
>>print_r($error_table);
>>?>
> 
> 
> of course not!

What do you mean "of course not"? That this script does not work?
It works in PHP 5.1.2.

> 
> 
> 
>>I was just talking about using
>>$error_table = array()
>>as a function argument.
>>
>>Anyway, I could not find this syntax in the doc. If you can't find it in
>>the doc either, then this would be a PHP feature request :)
> 
> 
> the problem is not that this variable is not assigned in the function
> call, but it is assigned AFTER the function is executed:
> 
> <?php
> function myFunc(&$var)
> {
>     $var = 'set in function';
> }
> 
> $var = 'set before function';
> myFunc($var = 'set in function call');
> 
> var_dump($var);
> ?>
> 
> expected, and how it was before 5.1.2:
> set in function
> 
> now with 5.1.2 it prints:
> set in function call
> 
> 
Again, where do you see in the doc that we are allowed to do this?

Marc




More information about the Developers mailing list