Jaime_Pinheiro 0 Denunciar post Postado Abril 26, 2010 declare função autoload... function __autoload($class) { require_once $_SERVER["DOCUMENT_ROOT"] . "/$class.php"; } é um procedimento padrão... João, congrats, man! Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Abril 27, 2010 A parte mais f*da de OO é que tudo acontece por baixo dos panos E viva o encapsulamento !!! PS.: O João empolga MUUUUITO hehehehe :D O João empolgou mesmo está ótimo, tirou todas minhas dúvidas. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Só uma erro que tive, crei uma classe para imprimir os dados. Fatal error: Class 'com\model\ClientsQueue' not found in C:\Users\Vista\Documents\wamp\www\lista\com\model\lista_principal.php on line 5 declare função autoload... é um procedimento padrão... Exatamente, nesse tópico surgiu a mesma dúvida e eu postei um arquivinho de configurações que pode ajudar http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/index.php?/topic/386538-conexao-ssh-com-php-usando-state-design-pattern/page__view__findpost__p__1530309 João, congrats, man! Valeu Jaime !!! Eu acabei de terminar de implementar Deque e Stack, estão em http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/index.php?/topic/392381-collection-set-queue-deque-e-stack/ Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
WGuedes 0 Denunciar post Postado Abril 28, 2010 João Batista Neto, Ao implmentar o exemplo que você me deu, fui questionado da seguinte maneira. A fila e a pilha são considerados tipos específicos de lista. Numa lista linear genérica, é possível inserir e remover de qualquer posição,enquanto que em filas/pilhas isso é feito em lugares específicos. As duas maneiras típicas de se implementar listas são:- contiguidade física: utiliza vetor para armazenar os elementos.- encadeamento: cada elemento deve indicar quem vem depois/antes dele,utilizando ponteiros (não existe isso em PHP). Agora a questão, como fazer usando contiguidade física: utiliza vetor para armazenar os elementos? Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Abril 28, 2010 Numa lista linear genérica, é possível inserir e remover de qualquer posição As duas maneiras típicas de se implementar listas são:- contiguidade física: Dê uma olhada na Vector dessa implementação que passei, é exatamente isso que ela faz. encadeamento: cada elemento deve indicar quem vem depois/antes dele,utilizando ponteiros (não existe isso em PHP). hehehe, você deve utilizar a Vector no seu caso específico, mas vou aproveitar esse tópico que já está gigante para mostrar que é sim possível fazer o encadeamento em PHP: interface DoubleLinkedListItem { public function hasNext(); public function hasPrevious(); public function next(); public function previous(); public function setNext( DoubleLinkedListItem $next ); public function setPrevious( DoubleLinkedListItem $previous ); } abstract class AbstractListItem implements DoubleLinkedListItem { /** * @var ListItem */ private $next; /** * @var ListItem */ private $previous; public function hasNext(){ return !is_null( $this->next ); } public function hasPrevious(){ return !is_null( $this->previous ); } public function next(){ if ( $this->hasNext() ){ return $this->next; } else { throw new RuntimeException( 'Não temos um próximo' ); } } public function previous(){ if ( $this->hasPrevious() ){ return $this->previous; } else { throw new RuntimeException( 'Não temos um anterior' ); } } public function setNext( DoubleLinkedListItem $next ){ $this->next = $next; } public function setPrevious( DoubleLinkedListItem $previous ){ $this->previous = $previous; } } interface Clients { public function getName(); } class Cliente extends AbstractListItem implements Clients { private $name; public function __construct( $name ){ $this->name = $name; } public function getName(){ return $this->name; } } class DoubleLinkedList { private $first; private $last; private $current; public function add( DoubleLinkedListItem $item ){ if ( is_null( $this->first ) ){ $this->first = $item; } elseif ( !is_null( $this->last ) ){ $item->setPrevious( $this->last ); $this->last->setNext( $item ); } $this->last = $item; } public function getFirst(){ if ( !is_null( $this->first ) ){ return $this->first; } else { throw new RuntimeException( 'Lista vazia.' ); } } public function getLast(){ if ( !is_null( $this->last ) ){ return $this->last; } else { throw new RuntimeException( 'Lista vazia.' ); } } public function get(){ if ( is_null( $this->current ) ){ $this->current = $this->getFirst(); } else { $this->current = $this->current->next(); } return $this->current; } } Como pode ver, não existem arrays ou qualquer outra estrutura, usando isso ai: $lista = new DoubleLinkedList(); $lista->add( new Cliente( 'João' ) ); $lista->add( new Cliente( 'Batista' ) ); $lista->add( new Cliente( 'Neto' ) ); echo $lista->get()->getName() , PHP_EOL; echo $lista->get()->getName() , PHP_EOL; echo $lista->get()->getName() , PHP_EOL; A saída, obviamente, será: João Batista Neto Compartilhar este post Link para o post Compartilhar em outros sites
WGuedes 0 Denunciar post Postado Abril 28, 2010 Dê uma olhada na Vector dessa implementação que passei, é exatamente isso que ela faz. Em qual vetor ele faz essa implementação? No caso preciso chamar os outros arquivos dessa fila? hehehe, você deve utilizar a Vector no seu caso específico, mas vou aproveitar esse tópico que já está gigante para mostrar que é sim possível fazer o encadeamento em PHP: heheh João, pra você nada é impossivel fazer com PHP :D Vou fazer dos 2 modos :) Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Abril 28, 2010 Em qual vetor ele faz essa implementação? No caso preciso chamar os outros arquivos dessa fila? org/util/Vector heheh João, pra você nada é impossivel fazer com PHP Nada que, com um pouco de estudo, não se consiga facilmente. Caso tenha interesse em programação orientada a objetos, acompanhe a série PHP Orientado a Objetos, cujo primeiro artigo é http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Classes X Objetos Compartilhar este post Link para o post Compartilhar em outros sites
WGuedes 0 Denunciar post Postado Abril 28, 2010 Amigão, Não tem org/util/Vector Tem como implementar o mesmo? Estou lendo o artigo Classes X Objetos, é muito bom pra aprender OO em PHP. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Abril 28, 2010 Amigão, Não tem org/util/Vector http://forum.imasters.com.br/index.php?/topic/392381-collection-set-queue-deque-e-stack/ Compartilhar este post Link para o post Compartilhar em outros sites
WGuedes 0 Denunciar post Postado Abril 28, 2010 Usando o encadeamento em PHP fiz o seguinte: interface Clients { public function getName(); public function getAddress(); } class Cliente extends AbstractListItem implements Clients { private $name; private $address; public function __construct( $name , $address){ parent::__construct(); $this->name = $name; $this->address = $address; } public function getName(){ return $this->name; } public function getAddress(){ return $this->address; } } e depois chamei assim: <?php $lista = new DoubleLinkedList(); $lista->add( new Cliente( 'João' ) ); $lista->add( new Cliente( 'Endereco' ) ); $lista->add( new Cliente( 'Batista' ) ); $lista->add( new Cliente( 'Neto' ) ); echo $lista->get()->getName() , PHP_EOL; echo $lista->get()->getAddress() , PHP_EOL; echo $lista->get()->getName() , PHP_EOL; echo $lista->get()->getName() , PHP_EOL; ?> No entando deu erro: Warning: Missing argument 2 for Cliente::__construct(), called in D:\Arquivos de Programas\wamp\www\lista\com\teste\SimpleClients.php on line 10 and defined in Fatal error: Cannot call constructor in D:\Arquivos de Programas\wamp\www\lista\com\teste\DoubleLinkedList.php on line 67 Qual o erro no construtor? Compartilhar este post Link para o post Compartilhar em outros sites