#37134 [Asn->Bgs]: PDOStatement::fetchObject calls constructor after populating fields
| From: | helly@php.net | Date: | Wed, 19 Apr 2006 19:05:13 +0000 |
| Subject: | #37134 [Asn->Bgs]: PDOStatement::fetchObject calls constructor after populating fields | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-96008@lists.php.net to get a copy of this message | ||
ID: 37134
Updated by: helly@php.net
Reported By: mark-phpbugs at vectrex dot org dot uk
-Status: Assigned
+Status: Bogus
Bug Type: PDO related
-Operating System: Linux
+Operating System: *
-PHP Version: 5.1.3RC2
+PHP Version: *
-Assigned To: wez
+Assigned To: hell
New Comment:
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
This is by design.
Previous Comments:
------------------------------------------------------------------------
[2006-04-19 09:58:11] tony2001@php.net
Assigned to the maintainer.
------------------------------------------------------------------------
[2006-04-19 09:29:49] mark-phpbugs at vectrex dot org dot uk
Description:
------------
PDOStatement::fetchObject calls constructor after populating fields,
which is not what I expected.
I expected it to call __construct() first, then populate fields.
Reproduce code:
---------------
<?php
/* Test case for PDOStatement::fetchObject('ClassName')
* Vars populated before constructor is run.
*/
$db = new PDO("sqlite::memory:");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec("CREATE TABLE person (id INTEGER NOT NULL, name
varchar(100))");
$db->exec("INSERT INTO person(id, name) VALUES (1, 'Fred')");
class Person {
var $id;
var $name;
function __construct() {
$this->id = -1;
}
}
$st = $db->query('SELECT * FROM person');
$fred = $st->fetchObject('Person');
print_r($fred);
?>
Expected result:
----------------
$fred->id should be 1
As the constructor will be called before variable population.
Actual result:
--------------
$fred->id is -1
Because the constructor is called after variable population.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=37134&edit=1