Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WGuedes

Armazenar valores de uma classe no vetor

Recommended Posts

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

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

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

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

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

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

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.