Ir para conteúdo

POWERED BY:

Arquivado

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

Douglas

Classes PHP

Recommended Posts

Pessoal...

 

Estou com um livro sobre OOP - OOP Programação orientada a objetos - Desmitificado;

 

Os exemplos de classes são todos em Java e C/C++, qual eu devo me assemelhar para o PHP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A explicação de OO é válida para todas, mas uma ou outra linguagem pode apresentar um comportamento diferente no que diz respeito a uso de memória e coisas do tipo. Não tenho certeza absoluta por não conhecer muito de C++, mas acho que se assemelha mais ao Java.

 

Lembrando que você só pode considerar os exemplos se comparando com PHP5.

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm...Então o PHP4 seria uma "emulação" de OOP?-----------O livro é legal, mas o é um pouco complicado de entender, é não é muito objetivo nas explicações. Acredito que seja a tradução, que está complicando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que eu posso te dizer com certeza: Comprar livros de informática traduzidos de outros idiomas é uma b........ Muitos dos termos, as vezes, não deveriam ser traduzidos e eles traduzem, acaba que complica o entendimento do que ta escrito, de qualquer forma, é um passo. Qualquer coisa vai postando que a gente vai tentando "solucionar o enigma do livro". Imagem Postada

 

Quanto ao PHP4, a orientação a objetos era bem fraquinha. Você já deve ter lido neste livro que uma linguagem orientada a objetos deve ter algumas caracteristicas, como: Abstração, Encapsulamento, Herança, Interfaces e Polimorfismo. Algumas destas características não existem no PHP4.

 

Para entender melhor isto que estou querendo dizer, de uma olhada nos capítulos 18 e 19 do manual do PHP:

http://www.php.net/manual/pt_BR/language.oop.php

http://www.php.net/manual/pt_BR/language.oop5.php

Compartilhar este post


Link para o post
Compartilhar em outros sites
Então o PHP4 seria uma "emulação" de OOP?

Não sei dizer com certeza, mas acho que não... o que sei é que toda a parte de OO do PHP foi reescrita na versão 5, ficando muito próxima a Java.

 

Se você não tiver problemas com Inglês, veja este artigo: http://www.php-mag.net/itr/online_artikel/...nodeid,114.html

É o melhor que já encontrei sobre os conceitos de orientação a objetos...

 

[]'s!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É a tradução é muito mal feita, muita repetição do que já escrito, agora mesmo estou na parte do Encapsulamento. Ele me mostra um quadro (parece um UML).

Student

---------------------------

Número de identificação

Nome

SobreNome

Graduação

---------------------------

Write()

Display()

Ou coloca tudo em inglês ou tudo em português. Imagem Postada

 

Se alguém souber de titulos que expliquem OOP escrito por brasileiros, me avisem.

 

Dúvidas com certeza eu terei, e muitas. Em breve estarei colocando aqui no fórum.

 

[update]

Valeu Prog e Illidan, com certeza, vou dar uma olhada nesses links.

[/update]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o proprio manual do php tem bastante coisa pelo menos o basico ja da para você pegar

 

e outra coisa oop é para php5 e nao esta nem 50% mas ja melhorou bastante ja o php 4 é ate uma gambiarra fazer oop com ele

 

http://forum.imasters.com.br/index.php?showtopic=151480

 

e o oop do php é bem parecido com java e .NET

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm.. então vou direto para o php5.Algumas coisas básicas eu já tenho idéia do que seja. Então a leiutura me facilita um pouco.O que me complica é entender essa o funcionamento dos procedimentos (funções) de uma classe.Por exemplo. Em classes de conexão eu vejo um procedimento para conectar, outro procedimento para executar a query, e outro procedimento para fechar a conexão.Mas porque criar um procedimento para 'fechar' a conexão se eu poderia coloca-lo no fim do procedimento da query?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim poderia mas uma classe bem feita e organizada ela faz exatamente o que o nome sugere exemplo um carro

 

o volante você vira o carro para a direita e esquerda

o freio para o carro

o acelerador faz o carro correr

a porta faz você ter acesso a entrar e sair do carro

 

entendeu cada coisa no seu lugar nao pode ter um metodo faz tudo

 

cada metodo cuida de um assunto

 

tem ate uma metodologia que diz se sua função tem mais de 20 linhas sua função ta errada

 

entao voltando ao caso eu poderia usar um metodo unico onde abre executa e fecha o banco mas eu nao teria essa opção sozinho se precisa-se chamar só o abrir ou fechar taria junto da executa_query

 

ah e outra coisa no php5 você usa os construtores e destrutores dai você pode colocar neles para abrir e fechar o banco nao precisando mais do metodo abrir e fechar

 

um exemplo que eu fiz (antigo ja) = ) mas vale como exemplo :

 

class DB extends mysqli
{

public function __construct()
{
	try {
		@parent::__construct(SERVIDOR, USUARIO, SENHA, BANCO);
		if(mysqli_connect_error()){
		   	throw new Exception(mysqli_connect_error());				
		}
		return true;
	} catch(Exception $erro) {
		$this->exception_handler($erro);
	}
}

public function __destruct() {
	if(!mysqli_connect_errno()){
		parent::close();   
	}	
}

public static function exception_handler($exception) {
	$mensagem = $exception->getMessage();
	$codigo   = $exception->getCode();
	$arquivo  = $exception->getFile();
	$trace	= $exception->getTraceAsString();

	$dir = getcwd()."\\logs\\";
	if(!file_exists($dir)) {
		mkdir($dir);
	}
	error_log(date("Y-m-d H:i:s")."|$mensagem|$codigo|$arquivo|$trace\r\n\r\n", 3, $dir."debugger.log");
	echo "Erro: " , $mensagem, "\n";
	exit;	
}

public function query($sql)
{
	if(!mysqli_connect_errno()) {
		return parent::query($sql);	   
	}	
}	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interessante essa classe.Mas na função (function exception_handler), você tem 'public static'? Não seria apenas um? public, static ou private?Cada ação que eu for realizar, é uma nova função que eu devo criar? (até rimou!)

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://br.php.net/manual/pt_BR/language.oop5.static.php

 

A declaração static deve estar depois da declaração de visibilidade. Por compatibilidade com o PHP 4, se nenhum declaração de visibilidade for usada, então o membro ou método será tratado como se fosse declarado como public static.

 

outra coisa qualquer function nao declarada a visibilidade o php intendera como "public" por isso é opcional colocar public

mas eu sempre coloco

 

sobre a 2 pergunta:

 

lembre que em oop um objeto representa

algo do mundo real. Metodos sao ações que o objeto pode fazer,

propriedades sao dados pertinentes ao objeto. entao toda vez que você dá

um nome a uma classe ou metodo se pergunte o que ela está representando. Daí veja

o metodo, e pense se aquele metodo realmente é algo que aquele objeto

pode fazer.

 

tente perguntar para você mesmo o que seu metodo faz

Se as perguntas não fazem sentido ou se as respostas não são simples,

provavelmente tem algo errado na sua classe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é complicado de entender esse negócio de visibilidade. Vejam se eu entendi.O private, só pode ser acessado na classe atual, não pode ser herdado, certo?O static, tem um valor estático, (uma constante), e não pode ser alterado?Dúvidas..O protected, quando devo usa-lo e pra que serve?Qual a diferença entre (protected e private)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

private você limita apenas a propria classe o protected você limita entre as classes herdadas

 

exemplo

 

class Deus
{
private function Onipresente()
{
	return "Eu Sou onipresente";
}

protected function Pensar()
{
	return "Eu posso Pensar";
}
}

class homem extends Deus
{
public function teste()
{
	return parent::Pensar();
}	
public function teste2()
{
	return parent::Onipresente();
}		
}

$teste = new homem();
echo $teste->teste();
echo $teste->teste2();

 

resultado do exemplo acima:

Fatal error: Call to private method Deus::onipresente() from context 'homem' in C:\root\test3.php on line 24

 

faça o teste e veja o homem herda a classe Deus mas tem coisas que só Deus pode fazer e o homem pode , porque o que Deus pode fazer é metodo private e só a Classe Deus que pode executa-la

 

desculpe o exemplo fiz correndo to indo almoçar t+

 

mas se quiser posta algumas duvidas ai depois

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem a sua conclusão está certo quanto ao static.agora a diferença em Protected ePrivate.Protected ele é protegido então você não vai conseguir usar uma função ou variavel protegida dentro da classe já o private ele é privado algo que somente a classe que contém o metodo ou uma varivel que vai ter acesso a ela mais você consegue ter acesso a ela fora da classe quando você cria um novo objeto (new objetc) chamando o proprio objeto que contem o private.Edit: O fabyo posto antes de mim e ta perfeito =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não consegui entender muito bem o protect.O protect pode ser herdado como o public, mas não pode ser alterado (manipulado) é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Protect ele está protegido ele pode ser usado em subclasse mais não pode ser usado fora das classe ex:

 

class objeto{ protected function protegido(){  return "pode ser chamado em subclasses, mais fora das classes não"; } private function privado(){  return "não pode ser chamado em subclasses, mais pode chamar ele quando o objeto é iniciado como você está vendo agora"; } public function publico(){  return "aqui você pode usar tanto em subclasse quanto fora das classes"; }class subObjeto{ public function subPrivado(){  return $this->privado(); // aqui não mostra a mensagem } public function subProtegido(){  return $this->protegido(); // aqui mostra a mensagem } public function subPublico(){  return $this->publico(); // aqui mostra a mensagem }}}$teste = new objeto();echo $teste->publico() // aqui ele mostra a mensagemecho $teste->privado() // aqui ele mostra a mensagemecho $teste->protegido() // aqui da erro $teste2 = new subObjeto();echo $teste2->subPublico() // aqui ele mostra a mensagemecho $teste2->subPrivado() // aqui da erroecho $teste2->subProtegido() // aqui mostra a mensagem

saco agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só completando o que o pessoal falou... existem estes três modificadores de visibilidade: public, protected e private.

 

Public

É o menos restritivo de todos. Permite acessar um atributo da classe (propriedade ou método) diretamente através de um código que esteja fora da classe.

 

Protected

Permite acesso aos atributos da classe somente através de um código que esteja dentro da classe onde ela foi definida, ou numa classe filha.

 

Private

É o mais restritivo. Permite acesso aos atributos da classe somente através de um código que esteja dentro da classe onde ela foi definida.

 

Você nunca poderá ter um contrutor "private" ou "protected", caso contrário não é possível criar a instância da classe.

 

Quanto ao modificador static, serve para que você acesse uma variável ou uma função estaticamente, ou seja, sem precisar criar o objeto. Por conta disto, você não pode utilizar a variável "$this" dentro de um método estático, pois o objeto pode não ter sido criado quando ele for chamado. Acaba sendo como uma variável ou função normal, só que está encapsulada dentro classe.

 

Vou utilizar um exemplo da linguagem Java pra mostrar a utilidade do modificador "static". Nesta linguagem, você tem a classe "Math", em que as principais funções matemáticas estão definidas. Se você precisar de um "round", não precisa criar um objeto do tipo "Math" só pra executar essa tarefa. Chama o método estaticamente: Math.round(valor);

No PHP, a sintaxe seria: Math::round($valor);

 

beleza? wink.gif

 

[]'s!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pensava que era complicado, agora eu tenho mais que certeza. Imagem Postada

 

 

Em qual situação real, eu iria usar o modificador de visibilidade protect?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja o seguinte exemplo:

 

Vamos imaginar um objeto Casa, esta tem várias propriedades e dentro da Casa temos vários outros objetos, tipo: Geladeira, Porta, Janela, Mesa, Banheiro ...

 

Vamos imaginar que este objeto Casa tenha algumas propriedades, como: cor, endereco, ...

 

Exemplificando public: (sem restrição)

O objeto Banheiro desta Casa pode ser usado por qualquer Pessoa, independente de onde esta Pessoa venha e nem pede licença. Imagem Postada

 

Exemplificando private: (mais restritivo)

Nenhuma Pessoa pode ter acesso ao objeto Banheiro da sua Casa, a não ser que este tenha uma chave (um método modificador). Imagem Postada

 

Exemplificando protected: (restrição intermediária)

Todas as Pessoas do seu Condominio* tem acesso livre ao seu objeto Banheiro, como em public, mas as Pessoas de fora do seu Condominio* só podem usar o Banheiro caso tenham uma chave, como em private.

 

*Condominio, neste contexto, pode ser um objeto que é criado dentro da classe que tenha a visibilidade protected, uma classe do mesmo pacote ou relacionadas de alguma maneira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O grupo JavaRN fez um encontro recentemente, no qual houve um mini-curso de Introdução à Orientação a Objeto. Acho que o material pode servir como consulta e exemplo do que já foi discutido por aqui. Imagem Postada

 

Orientação a Objetos

http://www.j2eebrasil.com.br/jsp/cursos/javarn.zip

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.