Objota O mundo orientado a objetos

Utilizando arrays em classes

Posted on julho 21, 2010

Posted by Rodrigo Ireno

Olá, para quem já tem acompanhado meus artigos sobre php deve ter visto o último arrays e matrizes em php que mostrava como utilizar arrays em php. Neste artigo quero mostrar um exemplo prático com arrays em php em uma classe. Vendo todos os métodos de iteração.

Iteração

Este termo é usado para designar uma busca em um array. Quando digo que se deve iterar por um array, quer dizer que devo percorrer este array até encontrar algum valor ou algo assim. Para iterar por um array é preciso fazer uso de algum tipo de loop. Para não ficar nenhuma dúvida vou demonstrar como iterar por um array com diversos tipos de loop. Tudo isso dentro do paradigma de orientação a objetos.

Teremos neste artigo dois objetos. O objeto contato e o objeto agenda, que não passa de uma lista de contatos. Eis a primeira classe:

Contato


class Contato{
	private $nome;
	private $telefone;
	private $email;

	public function Contato($nome, $telefone, $email){
		$this->nome = $nome;
		$this->telefone = $telefone;
		$this->email = $email;
	}

	public function setNome($novoNome){
		$this->nome = $novoNome;
	}
	public function setTelefone($novoTelefone){
		$this->telefone = $novoTelefone;
	}
	public function setEmail($novoEmail){
		$this->email = $novoEmail;
	}

	public function getNome(){
		return $this->nome;
	}
	public function getTelefone(){
		return $this->telefone;
	}
	public function getEmail(){
		return	$this->email;
	}
}

A classe acima tem por objetivo representar a entidade lógica contato com todos os atributos relevantes ao nosso escopo. Vejamos adiante a classe Agenda:

Agenda


class Agenda{

	// Um array com objetos do tipo Contato
	private $contatos;

	public function Agenda(){
		$contatos = array();
	}

	//Adiciona contatos a lista
	public function addContato($novoObjetoContato){
		$this->contatos[] = $novoObjetoContato;
	}

	//Mostra todos os contatos com foreach
	public function mostraContatos1(){
	 	foreach($this->contatos as $obj){
	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 	}
	}

	//Mostra todos os contatos com for
	public function mostraContatos2(){
	 	for($i=0;$i < count($this->contatos);$i++){
	 		$obj = $this->contatos[$i];

	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 	}
	}

	//Mostra todos os contatos com while
	public function mostraContatos3(){
		$i = 0;
	 	while($i < count($this->contatos)){
	 		$obj = $this->contatos[$i];

	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 		$i++;
	 	}
	}

	//Mostra todos os contatos com 'do while'
	public function mostraContatos4(){
		$i = 0;
	 	do{
	 		$obj = $this->contatos[$i];

	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 		$i++;
	 	}while($i < count($this->contatos));
	}
}


Veja como iteramos pelo array. O foreach sempre itera por todo o array. Já com os outros tipos de loop posso ter mais controle sobre a iteração. Outra observação a fazer é o método nativo do php count() que retorna um número inteiro, referente ao número de elementos dentro do array.

Depois de feitas estas duas classes, vamos juntar tudo isso em um único arquivo php e executar para ver o que acontece. Copie as duas classes e cole uma e depois a outra. Depois das duas classes. Adicione este código, abaixo, (tudo entre tags php, lógico):


$obj = new Agenda();

// Instancio dois contatos
$contato1 = new Contato("Rodrigo","11-2222-5555","rodrigo@objota.com.br");
$contato2 = new Contato("objota","22-5555-1111","objota@objota.com.br");

// adiciono estes a minha lista
$obj->addContato($contato1);
$obj->addContato($contato2);

$obj->mostraContatos4();


Neste código é feita a inicialização do objeto Agenda e adicionados dois contatos. Após isso utilizamos o método mostraContatos() para mostrar todos os contatos já adicionados.

Repare que tão importante quanto utilizar métodos de iteração por arrays, vimos também um bom exemplo de orientação a objetos. Construímos duas classes, sendo que um objeto utiliza o outro. Todos em conjunto formam uma agenda.

obs: O loop mais rápido é o for, só uma dica! 🙂

Teste o arquivo e veja o resultado. Este artigo fica por aqui, até a próxima e bom aprendizado!

No próximo post vamos falar de conexão com o banco de dados! até!

Classes em php – Glossário

Posted on julho 15, 2010

Posted by Rodrigo Ireno

Olá caros leitores, este artigo é uma definição sumária de cada elemento de uma classe. Utilize este artigo para consulta, sempre que necessário. Sendo um glossário será atualizado toda vez que surgir conteúdo novo.

Classe:

Uma classe em php assim como em outras linguagens tem um conjunto de métodos e atributos que tem por objetivo implementar uma entidade lógica, que pode ser baseada no mundo real ou não.

Atributos:

Um atributo representa, para classes e orientação a objetos, um dado específico, uma característica de uma entidade lógica. Em geral se deve considerar atributo um dado (característica) muito relevante de tal objeto, que é indispensável para cumprir com sua finalidade na aplicação. Por exemplo, uma classe Pessoa deve com certeza conter um atributo nome, cpf... e outros registros que tornem este indivíduo único. Um classe Automovel deve conter um atributo muito relevante, o número da placa, por exemplo.

Atributos e a visibilidade:

Em orientação a objetos se ouve muito de herança, encapsulamento. Em geral construir uma classe com um bom encapsulamento é uma boa prática de programação. Para tanto, é preciso sempre declarar seus atributos como private e fazer uso de métodos modificadores e de acesso

Método:

Um método consiste em um trecho de código que é escrito ( implementado) uma vez. Sendo possível executá-lo quantas vezes for necessário simplesmente chamando-0 pela sua assinatura.

Método construtor:

O método construtor é o responsável por inicializar um objeto com seu valor default. Um método construtor pode ter um conteúdo em seu bloco ou não. O bloco abriga as ações a serem executadas pelo método.

Em php pode-se declarar um método construtor de duas formas. Pode-se dar o nome do construtor igual ao nome da classe, isso é padrão para muitas linguagens. Ou é possível também declarar com o método nativo do php "__construct()".

Método de acesso:

Métodos de acesso são necessários quando um atributo é declarado como private. Tem a ver com a visibilidade do atributo em questão. Quando o atributo é público não é necessário um método de acesso, porém o objeto fica com um nível alto de acoplamento, e isso é ruim na orientação a objetos. Quando se utiliza private o atributo é inacessível fora da classe exceto atravez deste método, que tem por objetivo retornar o valor contido neste atributo.

Método modificador:

Tem por finalidade modificar o valor de um atributo da classe. Geralmente ele recebe o novo valor por parâmetro. Quando necessário é aconselhável fazer uma lógica de validação deste dado de entrada, para somente então atribuir este novo valor ao atributo da classe.


static:

Em php,  atributos ou métodos declarados como estáticos faz deles acessíveis sem precisar instanciar a classe. Um membro declarado como estático não pode ser acessado com um objeto instanciado da classe (embora métodos estáticos possam).

protected:

Esta palavra chave  limita o acesso a classes herdadas (e para a classe que define o item). Este conceito já é fio para entrar em herança e polimorfismo. Em termos mais simples, protected é o mesmo que public, somente para quem herda o método ou atributo. E para quem não herda nada protected tem o mesmo efeito de um private.

const

Utiliza-se esta palavra chave para transformar o atributo de uma classe um valor constante e inalterável. Para acessar uma constante de uma classe usa-se está sintaxe: NomeDaClasse::NomeDaConstante. Isso irá retornar o valor da constante existente na classe. É muito usual para números fixos usados durante o desenvolvimento, por exemplo o status de um usuário no seu site: 0 = desabilitado; 1 = habilitado; 2 = pendente; e etc. sendo mais fácil a associação de palavras.. do que de números fica mais fácil usar constantes como Status::DESABILITADO; Status::ABILITADO; Status::PENDENTE.