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

Reply via email to