Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, quero saber por que esse script não imprime nada como, por exemplo:
0 => 2
1 => 4
2 => 6
3 => 8
4 => 10
Não imprime nada... Achei que iria sair algo como mencionei ali em cima, mais obtive uma tela em branco sem erros :( Espero que vocês possam me ajudar. Abraço!
<?php
class ObjectIterator implements Iterator{
private $obj;
private $count;
private $currentIndex;
function __construct($obj){
$this->obj = $obj;
$this->count = count($this->obj->data);
}
function rewind(){
$this->currentIndex = 0;
}
function valid(){
$this->currentIndex < $this->count;
}
function key(){
return $this->currentIndex;
}
function current(){
$this->obj->data[$this->currentIndex];
}
function next(){
$this->currentIndex++;
}
}
class Object implements IteratorAggregate{
public $data = array();
function __construct($in){
$this->data = $in;
}
function getIterator(){
return new ObjectIterator($this);
}
}
$myObject = new Object(array(2, 4, 6, 8, 10));
$myIterator = $myObject->getIterator();
for($myIterator->rewind(); $myIterator->valid(); $myIterator->next()){
$key = $myIterator->key();
$value = $myIterator->current();
echo $key ."=>". $value ."<br />";
}
?>Obrigado pela ajuda. A classe ObjectIterator seria minha iteradora e a classe Object minha classe base, assim o script teria que fluir normalmente. Acho que essa solução que você me passou talvez não resolverá o problema... Será que tem outra maneira? Como você sugeriu, apareceram erros e não consegui ajeitar, se tornando um pouco complexo http://forum.imasters.com.br/public/style_emoticons/default/cry.gif
>
Acho que essa solução que você me passou talvez não resolverá o problema... Será que tem outra maneira? Como você sugeriu, apareceram erros e não consegui ajeitar, se tornando um pouco complexo http://forum.imasters.com.br/public/style_emoticons/default/cry.gif
Eu corrigi um erro de chamadas que você tinha cometido.Arrume os erros. Legal que eles apareceram! são teus amigos ^_^
Agora você tem onde e no que trabalhar.. sem saber oque estava errado, e sem o script 'falar nada', ia ser impossível.
Que erro deu ? esse código está incompleto.
Eu não consigo rodar ele, se você não postar todas as classes.
Oque está tentando fazer? que erro deu ? em que linha ?
Eu não sabia que você tinha uma classe 'Object'.
E a 'Iterator'? como ela é?
>
Que erro deu ? esse código está incompleto.
Eu não consigo rodar ele, se você não postar todas as classes.
Oque está tentando fazer? que erro deu ? em que linha ?
Eu não sabia que você tinha uma classe 'Object'.
E a 'Iterator'? como ela é?
William esse script não tem nenhuma implementação, estou aprendendo orientação a objetos e encontrei esse exemplo no livro que estou lendo. Nesse exemplo o autor mostra como realizar uma iteração com orientação a objetos. Acho que eu devia ter dito isso antes rsrs...
Respondendo a suas perguntas.
Oque está tentando fazer? que erro deu ? em que linha ?
Como eu disse ali em cima, esse é um exemplo do livro que fiquei com dúvida, porque não obtive o resultado esperado.
PS: O script que mostrei esta exatamente como no livro. Depois da sua dica para mudar a instância, retornou o seguinte erro:
Notice: Trying to get property of non-object in C:\wamp\www\POO\classe_base_e_classe_iteradora.php on line 12
Fatal error: Call to undefined method ObjectIterator::getIterator() in C:\wamp\www\POO\classe_base_e_classe_iteradora.php on line 60
E a 'Iterator'? como ela é?
Essa interface Iterator segundo o autor é uma interface própria do php, que precisa que os metodos rewind(), valid(), key(), current(), next() sejam declaradas para que ela possa funcionar. O script ensina a como fazer um interador usando POO. A IteratorAggregate segundo ele também é nativa do php.
O propósito do script eu entendi, achei bacana a idéia. Agora se estiver tudo errado não precisa ficar quebrando a cabeça para tentar resolver http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Talvez o autor tenha se confundido...
Surgiu mais uma dúvida http://forum.imasters.com.br/public/style_emoticons/default/coolio.gif
Esse trecho do código
function getIterator(){
return new ObjectIterator($this);
}
No método ObjectIterator, qual é o valor colocado em $this ou seja faz referência a quem nesse caso?.
Atente para a instanciação errada: