Edit report at https://bugs.php.net/bug.php?id=64346&edit=1
ID: 64346
Updated by: laruence@php.net
Reported by: gen dot work at gmail dot com
Summary: Function name resolution and eval
-Status: Verified
+Status: Feedback
Type: Bug
Package: *General Issues
Operating System: Ubuntu 12.10
PHP Version: 5.4.12
Assigned To: dmitry
Block user comment: N
Private report: N
New Comment:
@gen the main brief is, when you first call to \Foo\Bar, the 'time' constant in
the \Foo\Bar function, will bundle to "time function", in the first time , it
obviously will be bundled to \time.
then when you sencond call to it. PHP will use that cache instead of look up in
function table again for "time" function, to increase performance..
so, if we disable the cache, then performance slowdown...
what do you think? a workaround is define a Foo\Bar2, after you eval, you call
to it, then it will bundled to \Foo\Time..
Previous Comments:
------------------------------------------------------------------------
[2013-03-04 13:43:29] laruence@php.net
or maybe we should document this behavior, since disable it will bring performance
issue
------------------------------------------------------------------------
[2013-03-04 10:38:17] laruence@php.net
confirm this change. this is due to the 5.4 performance improvement: "literal
cache"
@dmitry, maybe we should not cache the function entry for INIT_NS_FCALL?
thanks
------------------------------------------------------------------------
[2013-03-04 10:11:24] gen dot work at gmail dot com
Description:
------------
The code below works as expected on version 5.3.
Test script:
---------------
namespace Foo {
function bar() {
var_dump(is_callable('Foo\\time'));
var_dump(time());
}
}
namespace {
\Foo\bar();
eval('namespace Foo; function time() { return -1; }');
\Foo\bar();
}
Expected result:
----------------
bool(false)
int(1362390237)
bool(true)
int(-1)
Actual result:
--------------
bool(false)
int(1362390237)
bool(true)
int(1362390237)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64346&edit=1