ID: 47657 User updated by: h dot reindl at thelounge dot net Reported By: h dot reindl at thelounge dot net Status: Bogus Bug Type: Performance problem PHP Version: 5.2.9 New Comment:
Thank for your interal details I understand this well and its ok I do now know about the internals of php and thought i suggest this in hope its possible a small change to make some things faster The arrogant replies from jani are my really problem Because he always sets everything as "bogus" without thinking and without explaining which gives me the feeling "i do not need input from stupid users" It would be a good idea if he let open reports and wait if someone else gives a lesser arrogant answer instead of making really stupid things like http://bugs.php.net/bug.php?id=42077 and spit the reporter in the face with it! Previous Comments: ------------------------------------------------------------------------ [2009-03-14 19:18:24] [email protected] 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). ------------------------------------------------------------------------ [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
