Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#53405 bugfix: current in foreach (by ptrofimov,dmkuznetsov) #113

Closed
wants to merge 1 commit into from

Conversation

ptrofimov
Copy link

#53405 bugfix: current in foreach (by ptrofimov,dmkuznetsov)

@lstrojny
Copy link
Contributor

Could you please add a test for this bugfix?

@lstrojny
Copy link
Contributor

lstrojny commented Jan 6, 2013

ping @ptrofimov

@lstrojny
Copy link
Contributor

ping again @ptrofimov

@ptrofimov
Copy link
Author

@lstrojny Oh, sorry. I thought everybody forgot about this pull request)) I'll add tests in few days.

@lstrojny
Copy link
Contributor

Nope. We never forget (alright, sometimes).

@nikic
Copy link
Member

nikic commented Feb 11, 2013

I don't think that this change is right. I'm pretty sure that the function was intentionally marked ZEND_SEND_PREFER_REF, just like key() was also.

This will change the behavior and it's unclear to me what behavior is the right one. At least this needs a bit more explanation.

If this is about making current()/key() independent of foreach() then this will only help in a limited way (esp when foreach-by-ref or foreach-over-ref is used). I have a patch that properly decouples foreach from the internal array pointer, but that's a rather more heavy change.

@lstrojny
Copy link
Contributor

@nikic thanks for the explanation. Do you mind closing it and open a different issue for your refactoring?

@ptrofimov
Copy link
Author

Well, the problem was that the code

$a = array(1, 2, 3);
foreach ($a as $i) {
    var_dump(current($a));
}

should give 1,1,1. But it gives 2,2,2. After this patch it gave 1,1,1.
But just the other day I downloaded latest source and wrote the test for this, and, unfortunately, it gives 2,3,false.
Why it is so, I don't know, may be something changed in new version.

Well, perhaps, we should close the issue((

@olekukonko
Copy link

I don't think it should be closed until its fixed. Has the same issue once it was a mess because it gives different results http://3v4l.org/sBDjl#v430. Can you also look at http://stackoverflow.com/a/14849560/1226894 and confirm how a function affect current output when working with foreach

@nikic
Copy link
Member

nikic commented Feb 13, 2013

@lstrojny What I have was basically a try to improve performance by avoiding the array copy in foreach; the decoupling from the internal array pointer was more of a sideeffect. And as I didn't yet see performance benefits for "real" code (only in artificial benchmarks) I'm not sure we want to do that change.

@jpauli
Copy link
Member

jpauli commented Jan 20, 2015

Closing as this subject is debatted against PHP7 actually, with a more detailed patch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants