Connecting Tech Pros Worldwide Forums | Help | Site Map

warning: rewind() supplied argument is not a valid stream resource in...

gp
Guest
 
Posts: n/a
#1: Oct 17 '06
i am implementing Iterator in a class, I have pretty much copied the
code from php.net on Object Iteration. Adding all the normal methods
for the task...rewind, current, next, etc.

I was attempting to add a seek method but am stymied by the above
warnin, as well getting a seek on index 0 (zero) to work.

public function __construct($contents) {
if ( is_array($contents)) {
if ( is_array($contents[1])) {
$this->cktl = $contents[1];
}
}
}

public function rewind() {

$cktl = rewind($this->cktl);
return $cktl;
}

public function current() {
$cktl = current($this->cktl);
return $cktl;
}

public function key() {
$cktl = key($this->cktl);
return $cktl;
}

public function next() {
$cktl = next($this->cktl);
return $cktl;
}

public function valid() {
$cktl = $this->current() !== FALSE;
return $cktl;
}

public function myseek($intPos) {
$myPos = 0;
$this->rewind();
while ( $myPos < $intPos && $this->valid() ) {
$cktl = $this->next();
$myPos++;
}
if ( !$this->valid() ) {
die("Invalid seek position");
}

return $cktl;
}


Tim Hunt
Guest
 
Posts: n/a
#2: Oct 17 '06

re: warning: rewind() supplied argument is not a valid stream resource in...



gp wrote:
Quote:
i am implementing Iterator in a class, I have pretty much copied the
code from php.net on Object Iteration. Adding all the normal methods
for the task...rewind, current, next, etc.
>
Quote:
>
public function rewind() {
>
$cktl = rewind($this->cktl);
return $cktl;
}

You need to use reset($this->cktl) not rewind($this->cktl), the rewind
function is different to the rewind method of an iterator as it does
not work on arrays and it resets the pointer position of a file handle.

gp
Guest
 
Posts: n/a
#3: Oct 17 '06

re: warning: rewind() supplied argument is not a valid stream resource in...



aaaaarrrrrg..... i think i rewrote that function incorrectly...after
going back thank you for pointing that out for me :-D
i'll give it a whack
gp
On Oct 17, 11:28 am, "Tim Hunt" <tim.n.h...@gmail.comwrote:
Quote:
gp wrote:
Quote:
i am implementing Iterator in a class, I have pretty much copied the
code from php.net on Object Iteration. Adding all the normal methods
for the task...rewind, current, next, etc.
>
Quote:
public function rewind() {
>
Quote:
$cktl = rewind($this->cktl);
return $cktl;
}You need to use reset($this->cktl) not rewind($this->cktl), the rewind
function is different to the rewind method of an iterator as it does
not work on arrays and it resets the pointer position of a file handle.
gp
Guest
 
Posts: n/a
#4: Oct 17 '06

re: warning: rewind() supplied argument is not a valid stream resource in...



Back to this issue? My seek function hates me and index 0....any
ideas?
Quote:
I was attempting to add a seek method but am stymied by the above
warnin, as well getting a seek on index 0 (zero) to work.
public function myseek($intPos) {
$myPos = 0;
$this->rewind();
while ( $myPos < $intPos && $this->valid() ) {
$cktl = $this->next();
$myPos++;
}
if ( !$this->valid() ) {
die("Invalid seek position");
}
>
return $cktl;
}
Jerry Stuckle
Guest
 
Posts: n/a
#5: Oct 17 '06

re: warning: rewind() supplied argument is not a valid stream resource in...


gp wrote:
Quote:
i am implementing Iterator in a class, I have pretty much copied the
code from php.net on Object Iteration. Adding all the normal methods
for the task...rewind, current, next, etc.
>
I was attempting to add a seek method but am stymied by the above
warnin, as well getting a seek on index 0 (zero) to work.
>
<code snipped>

rewind() is for files. I think you're looking for reset().

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Jerry Stuckle
Guest
 
Posts: n/a
#6: Oct 17 '06

re: warning: rewind() supplied argument is not a valid stream resource in...


gp wrote:
Quote:
i am implementing Iterator in a class, I have pretty much copied the
code from php.net on Object Iteration. Adding all the normal methods
for the task...rewind, current, next, etc.
>
I was attempting to add a seek method but am stymied by the above
warnin, as well getting a seek on index 0 (zero) to work.
<snip>
Quote:
>
public function myseek($intPos) {
$myPos = 0;
$this->rewind();
while ( $myPos < $intPos && $this->valid() ) {
$cktl = $this->next();
$myPos++;
}
if ( !$this->valid() ) {
die("Invalid seek position");
}
>
return $cktl;
}
>
if $intPos is 0, you never enter your while loop and therefore never
execute your assignment to $cktl. Also, it's unnecessary overhead to
set $cktl each time through the loop. All you really need to do is
advance the pointer.

Try this:

public function myseek($intPos) {
$myPos = 0;
$this->rewind();
while ( $myPos < $intPos && $this->valid() ) {
$this->next();
$myPos++;
}
if ( !$this->valid() ) {
die("Invalid seek position");
}

return $this->current();
}


--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Closed Thread


Similar PHP bytes

  • Bug (answers)