#47657 [Bgs]: str_replace() should not call replace-functions when needle missing
| From: | h dot reindl at thelounge dot net | Date: | Sat, 14 Mar 2009 19:26:06 +0000 |
| Subject: | #47657 [Bgs]: str_replace() should not call replace-functions when needle missing | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-134703@lists.php.net to get a copy of this message | ||
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] mattwil@php.net
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] jani@php.net
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