ID:               49032
 Updated by:       j...@php.net
 Reported By:      sala...@php.net
-Status:           Open
+Status:           Verified
 Bug Type:         SPL related
-Operating System: OS X 10.5
+Operating System: *
-PHP Version:      5.3.0
+PHP Version:      5.*, 6CVS (2009-07-22)


Previous Comments:
------------------------------------------------------------------------

[2009-07-23 11:46:00] sala...@php.net

Description:
------------
SplFileObject::fscanf should behave identically to fscanf but that does
not appear to be the case. When attempting to provide variables into
which values should be assigned, the script either warns of undefined
variables (when passing apparently by value?) or throws out call-time
pass-by-reference E_DEPRECATED errors (when forcing pass-by-reference).

Reproduce code:
---------------
// fruits.txt
apple,100
banana,21

Pass by value:
<?php
$file = new SplFileObject("fruits.txt");
while (!$file->eof()) {
        var_dump($file->fscanf("%[a-z],%d", $fruit, $quantity), $fruit,
$quantity);
}
?>

Pass by reference:
<?php
$file = new SplFileObject("fruits.txt");
while (!$file->eof()) {
        var_dump($file->fscanf("%[a-z],%d", &$fruit, &$quantity), $fruit,
$quantity);
}
?>

Expected result:
----------------
Pass by value (the method definition should take variables by
reference):

int(2)
string(5) "apple"
int(100)
int(2)
string(6) "banana"
int(21)

Pass by reference:

Should report E_DEPRECATED call-time pass-by reference. Which it does.

Actual result:
--------------
Pass by value:

<br />
<b>Notice</b>:  Undefined variable: fruit in <b>fruits.php</b> on line
<b>4</b><br />
<br />
<b>Notice</b>:  Undefined variable: quantity in <b>fruits.php</b> on
line <b>4</b><br />
<br />
<b>Notice</b>:  Undefined variable: fruit in <b>fruits.php</b> on line
<b>4</b><br />
<br />
<b>Notice</b>:  Undefined variable: quantity in <b>fruits.php</b> on
line <b>4</b><br />
int(2)
NULL
NULL
<br />
<b>Notice</b>:  Undefined variable: fruit in <b>fruits.php</b> on line
<b>4</b><br />
<br />
<b>Notice</b>:  Undefined variable: quantity in <b>fruits.php</b> on
line <b>4</b><br />
<br />
<b>Notice</b>:  Undefined variable: fruit in <b>fruits.php</b> on line
<b>4</b><br />
<br />
<b>Notice</b>:  Undefined variable: quantity in <b>fruits.php</b> on
line <b>4</b><br />
int(2)
NULL
NULL




Pass by reference:
<br />
<b>Deprecated</b>:  Call-time pass-by-reference has been deprecated in
<b>fruits.php</b> on line <b>4</b><br />
<br />
<b>Deprecated</b>:  Call-time pass-by-reference has been deprecated in
<b>fruits.php</b> on line <b>4</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already
sent by (output started at fruits.php:4) in <b>fruits.php</b> on line
<b>1</b><br />
int(2)
string(5) "apple"
int(100)
int(2)
string(6) "banana"
int(21)




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=49032&edit=1

Reply via email to