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
