ID: 38745 User updated by: arqentus at arqentus dot com Reported By: arqentus at arqentus dot com Status: Open Bug Type: Class/Object related Operating System: Windows 2003 PHP Version: 5.1.6 New Comment:
Note: The extract code was texted with EXTR_OVERWRITE & EXTR_IF_EXISTS. The "EXTR_REFS" was a final foolish attempt to see how it was going to react( expecting a error feedback, but nothing came ). Forgot to remove it from the submitted code. I'm including this comment, to be sure this bug does not get closed becouse you think i used the wrong EXTR ;) Previous Comments: ------------------------------------------------------------------------ [2006-09-07 22:01:51] arqentus at arqentus dot com Description: ------------ extract does not override the values when using a extended class. Note: Using a manual fill, will work: class cText extends cField{ function __construct( $fields = array() ) { foreach($fields as $key => $val ) { $this->{$key} = $val; } //extract($fields, EXTR_REFS); } } Looks like the extract can't handle the extend class. Note: Using a normal NONE extended class, and extract will work. Somehow it seems to lack the scope. Yet, a 'manual' foreach loop is able to access the scope. Differend combination have been tried ( moving the construct to the parent, passing the fields to the parent and extracting there, etc ). None are able to work. Reproduce code: --------------- class cField{ var $desc = 'xxx'; } class cText extends cField{ function __construct( $fields = array() ) { extract($fields, EXTR_REFS); } } $user_name = new cText( array ( _desc => 'Name' ) ); echo $user_name->desc; Expected result: ---------------- The expect result is: 'Name'; Actual result: -------------- The result archieved is: 'xxx'; ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=38745&edit=1