iMasters Fóruns: Oop - iMasters Fóruns

Ir para

Página 1 de 1
  • Novo tópico
  • Responder

Oop Iniciante

#1 Membro offline   M4n0w4r Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 45
  • Cadastrado: 23-julho 09
  • Sexo:Masculino

Postou 03 novembro 2009 - 15:54

Olá galera, quem puder ajudar eu agradeço.

Tenho algumas dúvidas bestas sobre OOP, pesquisei muito no google e infelizmente não achei a resposta :/

1 - Declarar uma função sem "public", "private" ou "protected" a torna automaticamente "public" ?
class algumaCoisa {
	function fazQualquerCoisa () { // Essa função é pública ?
		echo "a";
	}
}


2 - Preciso chamar uma classe sem instanciar nenhuma função, é correto fazer isso ?
new classeQualquer () // Chama classe

Tentei assim
class classeQualquer {	
	function __construct () {
		$this->criaArquivoQualquer ();
	}
	
	private function criaArquivoQualquer () {
		// Código para criar um arquivo qualquer
	}
}


Vlwwwwwwwwww, flowwwwwwwwwwwwwwww

#2 Membro online   William Bruno Ícone

  • Ícone
  • Grupo: Moderadores
  • Posts: 5694
  • Cadastrado: 08-janeiro 08
  • Sexo:Masculino
  • Localização:São Paulo - SP

Postou 03 novembro 2009 - 16:15

1. Sim.
2. Pra quê ? 'chamar classe' ? com que intenção ?

#3 Membro offline   M4n0w4r Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 45
  • Cadastrado: 23-julho 09
  • Sexo:Masculino

Postou 03 novembro 2009 - 16:33

Obrigado pela resposta.

Quote

2. Pra quê ? 'chamar classe' ? com que intenção ?

Apenas curiosidade, um caso seria quando você quiser chamar a função de uma classe sem usar variáveis e métodos estáticos

$classe = new Classe (); $classe->algumaCoisa (); // Funciona
new Classe ()->algumaCoisa () // Não Funciona


Claro que a classe for chamada mais de uma vez o sistema terá um consumo maior, mas estou apenas imaginando :)

#4 Membro offline   Prog Ícone

  • Space Invaders
  • Ícone
  • Grupo: Membros
  • Posts: 3862
  • Cadastrado: 25-junho 05
  • Sexo:Masculino
  • Localização:Brasília/DF

Postou 03 novembro 2009 - 17:34

2- É possível, como, por exemplo, para fazer uma transformação específica ou aplicar polimorfismo.

#5 Membro online   William Bruno Ícone

  • Ícone
  • Grupo: Moderadores
  • Posts: 5694
  • Cadastrado: 08-janeiro 08
  • Sexo:Masculino
  • Localização:São Paulo - SP

Postou 03 novembro 2009 - 17:46

Tente entender melhor o conceito de objeto.

#6 Membro offline   Prog Ícone

  • Space Invaders
  • Ícone
  • Grupo: Membros
  • Posts: 3862
  • Cadastrado: 25-junho 05
  • Sexo:Masculino
  • Localização:Brasília/DF

Postou 03 novembro 2009 - 17:53

Ver postWilliam Bruno, em 03 novembro 2009 - 17:46 , disse:

Tente entender melhor o conceito de objeto.


Tipo... qual o conceito que você tem para um objeto?

#7 Membro offline   lucasmartins.com.br Ícone

  • Lucas Martins
  • Ícone
  • Grupo: Membros
  • Posts: 304
  • Cadastrado: 26-setembro 07
  • Sexo:Masculino
  • Localização:São Paulo / SP

Postou 03 novembro 2009 - 18:18

2 - é claro que pode, como o Prog mesmo disse.

O objeto está sendo criado, só não está sendo armazenado em variavel ou array.

Abraços



#8 Membro online   William Bruno Ícone

  • Ícone
  • Grupo: Moderadores
  • Posts: 5694
  • Cadastrado: 08-janeiro 08
  • Sexo:Masculino
  • Localização:São Paulo - SP

Postou 03 novembro 2009 - 18:43

Pode-se dizer de forma 'grosseira' que um objeto é uma instância de uma classe.
Uma classe é uma coisa que faz objetos (,ou não).

Qndo você faz:
$var = new Classe();

você está colocando na variável $var, uma instância da classe 'Classe'.
$var agora é um objeto.


Se fizermos o seguinte:
$var = new Classe();
$var2 = new Classe();

temos 2 objetos.
Uma classe não é um objeto.
As instâncias dela é que o são.

você 'não chama uma classe', mas manipula atributos e métodos do objeto criado.
Entenda a classe como a 'forma que faz os objetos'. E não como a entidade em si.

#9 Membro offline   João Batista Neto Ícone

  • Verschränkung
  • Ícone
  • Grupo: Moderadores Trainee
  • Posts: 876
  • Cadastrado: 03-janeiro 09
  • Sexo:Masculino
  • Localização:Franca/SP

Postou 03 novembro 2009 - 18:55

Ver postM4n0w4r, em 03 novembro 2009 - 15:54 , disse:

1 - Declarar uma função sem "public", "private" ou "protected" a torna automaticamente "public" ?


Sim, ela será pública devido a compatibilidade com o PHP 4, porém, se você estiver desenvolvendo uma aplicação onde esse tipo de compatibilidade não é necessária, então é melhor que você especifique sempre a visibilidade da propriedade ou método.

Ver postM4n0w4r, em 03 novembro 2009 - 15:54 , disse:

2 - Preciso chamar uma classe sem instanciar nenhuma função, é correto fazer isso ?

new classeQualquer () // Chama classe

Tentei assim
class classeQualquer {	
	function __construct () {
		$this->criaArquivoQualquer ();
	}
	
	private function criaArquivoQualquer () {
		// Código para criar um arquivo qualquer
	}
}


Ver postM4n0w4r, em 03 novembro 2009 - 16:33 , disse:

Apenas curiosidade, um caso seria quando você quiser chamar a função de uma classe sem usar variáveis e métodos estáticos


Teria como você dizer um caso onde você realmente precisaria fazer isso ?

Ver postProg, em 03 novembro 2009 - 17:34 , disse:

...para fazer uma transformação específica ou aplicar polimorfismo.


???

#10 Membro offline   Prog Ícone

  • Space Invaders
  • Ícone
  • Grupo: Membros
  • Posts: 3862
  • Cadastrado: 25-junho 05
  • Sexo:Masculino
  • Localização:Brasília/DF

Postou 03 novembro 2009 - 20:29

Ver postJoão Batista Neto, em 03 novembro 2009 - 18:55 , disse:

Ver postProg, em 03 novembro 2009 - 17:34 , disse:

...para fazer uma transformação específica ou aplicar polimorfismo.


???


O que significa "???" ? A "dúvida" diz respeito a palavra aplicar ou a polimorfismo?

#11 Membro offline   lucaswxp Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 415
  • Cadastrado: 20-abril 08
  • Sexo:Masculino

Postou 03 novembro 2009 - 21:18

Um objeto é como se fosse uma cópia da classe (em variavel).
A diferença e que os objetos criados são dinamicos e indenpendentes.

Você "pode" sim instanciar uma classe sem utilizar seus metodos/propriedades, mas para que? Lembre-se que criar um objeto é mais lerdo doque chamar uma simples função (para o caso de você querer apenas utilizar o "contruct")

#12 Membro offline   João Batista Neto Ícone

  • Verschränkung
  • Ícone
  • Grupo: Moderadores Trainee
  • Posts: 876
  • Cadastrado: 03-janeiro 09
  • Sexo:Masculino
  • Localização:Franca/SP

Postou 04 novembro 2009 - 06:09

Ver postProg, em 03 novembro 2009 - 20:29 , disse:

O que significa "???" ? A "dúvida" diz respeito a palavra aplicar ou a polimorfismo?


Veja,

Polimorfismo é a capacidade de um método trabalhar com vários tipos e decidir em runtime qual ação tomar, a minha questão é: porque alguém instanciaria um objeto sem utilizar uma variável, para aplicar polimorfismo.

Porque se eu entendi bem o que se quis dizer, existe uma grande confusão sobre o conceito nessa afirmação.

#13 Membro offline   Prog Ícone

  • Space Invaders
  • Ícone
  • Grupo: Membros
  • Posts: 3862
  • Cadastrado: 25-junho 05
  • Sexo:Masculino
  • Localização:Brasília/DF

Postou 04 novembro 2009 - 09:16

Bem... http://pt.wikipedia....ki/Polimorfismo

Um exemplo didático:
<?php

interface iAnimal {

    public function som();

}

class Cachorro implements iAnimal {

    public function som() {
        return "auuuuuuuuuuu";
    }

}

class Gato implements iAnimal {

    public function som() {
        return "miau";
    }

}

class PetShop {

    private $animal = array();

    public function setAnimal(iAnimal $animal) {
        $this->animal[] = $animal;
    }
    
    public function getListaAnimais() {
        return $this->animal;
    }

}

$a = new PetShop();
$a->setAnimal(new Gato);
$a->setAnimal(new Cachorro);
$a->setAnimal(new Cachorro);
$a->setAnimal(new Gato);
$a->setAnimal(new Cachorro);

print_r($a->getListaAnimais());

?>


Outro exemplo relacionado com o tópico (métodos estáticos):
<?php

class Tempo {

    function __construct() {
        print "construiu";
    }
    
    function __destruct() {
        print "Destruiu";
    }

    function getHora() {
        return date("G:i");
    }
    
    function getData() {
        return date("d/m/Y");
    }

}

// chamando método estático
echo Tempo::getData();
echo Tempo::getHora();

// criando um objeto e chamando os métodos
$t = new Tempo();
echo $t->getData();
echo $t->getHora();

?>


Página 1 de 1
  • Novo tópico
  • Responder

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)