Go Back   Forum Care Forums > Development Reference Area > Php Development

Reply
 
LinkBack Thread Tools Display Modes
Re: [PHP] Function returning but continues execution
Old
  (#1)
Roman Neuhauser
Guest
 
Posts: n/a
Default Re: [PHP] Function returning but continues execution - 05-14-2007, 03:36 AM

Please don't top post and trim the quoted material if you want me to
discuss this with you.

# EMAIL REMOVED / 2007-01-22 16:36:40 +0000:
> Roman Neuhauser wrote:
> ># EMAIL REMOVED / 2007-01-22 15:31:55 +0000:
> >>I also cannot see how the function can return false and execute the SQl
> >>query when it is only called once.

> >
> >You have presented no proof that there's a bug in the PHP. What you
> >have presented looks like you have a bug, and the function gets called
> >more than once. Have you used a debugger? See http://xdebug.org/.

>
> Yes, I know it looks like a bug in my code because I'm not able to write
> a test case that can reproduce it simply enough to report as a bug -


Write tests that prove the code does what you think it does. Which of
these tests will break?

> However, the behaviour I am describing surely suggests some kind of
> issue somewhere in PHP itself.


I still have no reason to believe it. Such a bug in PHP would require
memory corruption in the Zend engine. I run complex code in 5.2 on Linux,
and haven't seen anything like that.

> My reasoning for this is if I echo the 2 variables I get:
>
> Array ( [0] => 3 )
> and
> 3
>
> and the bug appears. But if I set them manually before the in_array test:
>
> $_SESSION['user']['friends'] = array(0 => 3);
> $friend['user_id'] = 3;
>
> it works as expected. Am I wrong in thinking that this has to be a bug
> in PHP?


You haven't shown the complete code, and what you *have* shown didn't
prove anything. Show me that it really gets past the return. var_dump() the
two things your comparing there with in_array() *after* the if() block,
and prove that it's in the same invocation as that return false.

function f()
{
static $x = 0;
$i++;
if (!in_array($friend, $friends)) {
var_dump("inside", $i, $friend, $friends);
return false;
}
var_dump("after", $i, $friend, $friends);
$core->database->exec(...);
}

> I have used debug_backtrace() to find out what is going on as regards
> how many times the function is being executed - that is the first thing
> I checked because it does indeed suggest that it is being executed
> multiple times, however, the back trace only reveals 1 call/execution.


Not suprprising. This code outputs

#0 f(1) called at [/usr/home/roman/tmp/scratch30:8]
#0 f(2) called at [/usr/home/roman/tmp/scratch30:8]

<?php

function f($i)
{
debug_print_backtrace();
}
foreach (range(1, 2) as $i) {
f($i);
}


--
How many Vietnam vets does it take to screw in a light bulb?
You don't know, man. You don't KNOW.
Cause you weren't THERE. http://bash.org/?255991
   
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On





Contact Us - Forum Care Forums - Archive - Top