Ir para conteúdo

POWERED BY:

Arquivado

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

M4n0w4r

Oop

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. Sim.

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta.

 

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 :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente entender melhor o conceito de objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

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
	}
}

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 ?

 

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

 

???

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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

 

???

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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")

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem... http://pt.wikipedia.org/wiki/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();

?>

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.