Bug #52110 [Com]: get_defined_vars is inconsistent with $this
| From: | jbwdevries at gmail dot com | Date: | Thu, 17 Jun 2010 15:10:49 +0000 |
| Subject: | Bug #52110 [Com]: get_defined_vars is inconsistent with $this | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-151575@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=52110&edit=1
ID: 52110
Comment by: jbwdevries at gmail dot com
Reported by: jbwdevries at gmail dot com
Summary: get_defined_vars is inconsistent with $this
Status: Bogus
Type: Bug
Package: Unknown/Other Function
Operating System: Windows XP [Version 5.1.2600]
PHP Version: 5.3.2
New Comment:
I understand your reasoning; however, shouldn't you assume from the use
of get_defined_vars() that $this is needed?
Previous Comments:
------------------------------------------------------------------------
[2010-06-17 17:05:02] johannes@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
For performance reasons $this and super-globals are only populated when
they are needed. If the aren't needed they don't exist.
------------------------------------------------------------------------
[2010-06-17 16:40:09] jbwdevries at gmail dot com
Description:
------------
get_defined_vars() only contains the $this variable entry when $this is
assigned or returned. In all other cases (no use, gettting or setting of
property, callign a method) the $this entry is missing from the list.
Test script:
---------------
// Full example is at http://pastebin.com/FDJzCTRG
class Test
{
//...
public function testNoThis() {
echo __METHOD__ . PHP_EOL;
var_dump(array_keys(get_defined_vars()));
}
//...
}
$t = new Test();
$t->testNoThis();
Expected result:
----------------
Test::testNoThis
array(1) {
[0]=>
string(4) "this"
}
Test::testThisGet
array(1) {
[0]=>
string(4) "this"
}
Test::testThisSet
array(1) {
[0]=>
string(4) "this"
}
Test::testThisCall
array(1) {
[0]=>
string(4) "this"
}
Test::testThisUse
array(1) {
[0]=>
string(4) "this"
}
Actual result:
--------------
Test::testNoThis
array(0) {
}
Test::testThisGet
array(0) {
}
Test::testThisSet
array(0) {
}
Test::testThisCall
array(0) {
}
Test::testThisUse
array(1) {
[0]=>
string(4) "this"
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52110&edit=1