M4n0w4r 0 Denunciar post Postado Novembro 3, 2009 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
William Bruno 1501 Denunciar post Postado Novembro 3, 2009 1. Sim. 2. Pra quê ? 'chamar classe' ? com que intenção ? Compartilhar este post Link para o post Compartilhar em outros sites
M4n0w4r 0 Denunciar post Postado Novembro 3, 2009 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
Prog 183 Denunciar post Postado Novembro 3, 2009 2- É possível, como, por exemplo, para fazer uma transformação específica ou aplicar polimorfismo. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Novembro 3, 2009 Tente entender melhor o conceito de objeto. Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 3, 2009 Tente entender melhor o conceito de objeto. Tipo... qual o conceito que você tem para um objeto? Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Novembro 3, 2009 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
William Bruno 1501 Denunciar post Postado Novembro 3, 2009 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
João Batista Neto 448 Denunciar post Postado Novembro 3, 2009 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
Prog 183 Denunciar post Postado Novembro 3, 2009 ...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
lucaswxp 22 Denunciar post Postado Novembro 4, 2009 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
João Batista Neto 448 Denunciar post Postado Novembro 4, 2009 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
Prog 183 Denunciar post Postado Novembro 4, 2009 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