ID:          47657
 Updated by:  [email protected]
 Reported By: h dot reindl at thelounge dot net
 Status:      Bogus
 Bug Type:    Performance problem
 PHP Version: 5.2.9
 New Comment:

str_replace() is not "calling the replacement function." Your f1() and
f2() functions are called BEFORE str_replace() is run. Same in any
language, so there's certainly nothing str_replace() can do about it.

Once called, str_replace() doesn't do anything unnecessary when the
needle is missing. In other words, it's doing the same work as strpos(),
with the exception that it's also making a copy of the input string to
return, which can't be avoided either -- although you may be able to
measure the small amount of overhead (it's propotional to the input
length).


Previous Comments:
------------------------------------------------------------------------

[2009-03-14 18:03:17] h dot reindl at thelounge dot net

And you think it is best practice every possible optimzing
that is suggestet by users throw against a wall?

Sorry but for me it seems since a long time that
php-developers are not interested in any help
and thinking about making things better from
the community

------------------------------------------------------------------------

[2009-03-14 17:53:07] [email protected]

str_replace() does not accept functions as the parameters like you 
expect it to so there is no bug here either.

------------------------------------------------------------------------

[2009-03-14 17:41:10] h dot reindl at thelounge dot net

Description:
------------
If you use str_replace and the needle is not in the string there should
be no call to the replacement-function.

This can produce much overhead if the function is complex
At the moment you must manually check if you call the replace with
strpos - I think in many cases this will not happen and there is running
much overhead-code without any need in existing applications

Even if you know the problem it needs ugly php-code for get best
performance - If the php-core makes this check all exististing
applications can get better performance

Reproduce code:
---------------
<?php
 $str = 'Test [f1] Replace';
 $str = str_replace('[f1]', f1(), $str);
 $str = str_replace('[f2]', f2(), $str);

 function f1()
 {
  echo 'F1<br />';
 }

 function f2()
 {
  echo 'F2<br />';
 }
?>

Expected result:
----------------
Only f1() should be called

Actual result:
--------------
f1() AND f2() are called


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=47657&edit=1

Reply via email to