Bug #52484 [Com]: __set() ignores setting properties with empty names
| From: | bastard dot internets at gmail dot com | Date: | Mon, 02 Aug 2010 18:29:00 +0000 |
| Subject: | Bug #52484 [Com]: __set() ignores setting properties with empty names | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-153036@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=52484&edit=1
ID: 52484
Comment by: bastard dot internets at gmail dot com
Reported by: bastard dot internets at gmail dot com
Summary: __set() ignores setting properties with empty names
Status: Closed
Type: Bug
Package: Scripting Engine problem
Operating System: Irrelevant
PHP Version: 5.3.3
Assigned To: felipe
Block user comment: N
New Comment:
Thanks!
Previous Comments:
------------------------------------------------------------------------
[2010-08-01 15:27:43] felipe@php.net
This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
------------------------------------------------------------------------
[2010-08-01 15:27:03] felipe@php.net
Automatic comment from SVN on behalf of felipe
Revision: http://svn.php.net/viewvc/?view=revision&revision=301755
Log: - Fixed bug #52484 (__set() ignores setting properties with empty
names)
------------------------------------------------------------------------
[2010-07-30 06:51:58] bastard dot internets at gmail dot com
To clarify my second paragraph in the description, only by removing
__set() from the class will the desired error correctly generate. IE,
in any method, "$p = null; $this->$p = true;" will cause an expected
error, just not if the __set() method exists.
------------------------------------------------------------------------
[2010-07-29 11:29:02] bastard dot internets at gmail dot com
Er, actual result:
SET = 2
A Object
(
)
------------------------------------------------------------------------
[2010-07-29 11:24:59] bastard dot internets at gmail dot com
Description:
------------
Within only __set(), you can set a value of a new property with an empty
name ($p = null; $this->$p = 1;). The property won't really be created
though - the effects will be invisible to the user. No errors,
warnings, or notices are generated. This lack of an error message might
cause difficult to pinpoint bugs since all assignments of previously
undeclared properties within object scope regardless of originating
method are routed through __set();
Elsewhere in the object, attempting this will cause a fatal 'Cannot
access empty property' error as expected.
Test script:
---------------
<?php
class A{
function __set($prop, $val) {
echo "SET $prop = $val\n";
$this->$prop = $val; // should've caused error
}
}
$a = new A();
$prop = null;
$a->$prop = 2;
print_r($a); // empty object
?>
Expected result:
----------------
fatal 'Cannot set empty property' or 'invalid property name' error.
Actual result:
--------------
Nothing.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52484&edit=1