felipe592 1 Denunciar post Postado Agosto 25, 2012 Olá! Galera! Estou Mechendo com class Pela primeira vez. Gostaria de Uma Explicação Basica Sobre a diferença protected, private, é qual a forma correta de usar? a public Já estou sabendo declara Normal na class etc. Agora a public e protected Não sei a forma correta de utilizar não encontrei Algo Explicativo Sobre essa diferença! Alguem Poderia dar Um help? Agradeço! Fiquem com deus Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Xavier 189 Denunciar post Postado Agosto 25, 2012 Dê uma lida nesse artigo Vai clarear as ideias. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Agosto 25, 2012 Para se conseguir ocultar informações, usamos os modificadores de visibilidade, tanto para os métodos quanto para as propriedades, esses modificadores são três: public: A visibilidade pública (public) fará com que não haja ocultação nenhuma, toda propriedade ou método declarado com public serão acessíveis por todos que quiserem acessá-los, utiliza-se public para os métodos de interface, isso é, as operações que queremos que outros possam executar em nossos objetos. private: Ao contrário do public, esse modificador faz com que qualquer método ou propriedade seja visível só e somente só pela classe que a declarou, ninguém terá acesso a essas propriedades ou métodos diretamente, o acesso será possível somente através de métodos de interface. protected: A visibilidade protegida é como um mix da pública com a privada. Quando falamos sobre herança de classes e como os descendentes herdam características e comportamento de seus pais, a visibilidade protected faz com que todos os herdeiros vejam as propriedades ou métodos protegidos como se fossem públicos porém, do lado de fora, um outro objeto não conseguirá acessar diretamente essas informações já que, do lado de fora é como se fosse privada. Então, dentro da classes que declarante e todos seus herdeiros, um método ou propriedade é visível e fora da classes não. Para mais informações: http://forum.imasters.com.br/topic/392880-1-3-visibilidade-e-encapsulamento/ Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Agosto 25, 2012 Public: visível em qualquer escopo, você pode acessar métodos e propriedades e alterar propriedades livremente, sem nenhum tipo de controle. O recomendado é utilizar public SOMENTE PARA MÉTODOS. Ex.: class Foo { public $bar = 'bar'; public function getBar() { return $this->bar; } } $foo = new Foo(); // Dá para mostrar $bar assim: echo $foo->bar; // Dá para alterá-la assim: $foo->bar = 'bazzinga'; // Outra maneira de pegar seu valor é: echo $foo->getBar(); Private: visível somente para a classe. Geralmente, utilizamos private para propriedades e métodos internos das classes, os quais não podem, ou não precisam ser public. Para propriedades, normalmente cria-se métodos de acesso (setters e getters) que além de setar e retornar valores, muitas vezes executam alguma validação. Ex.: class Foo { private $bar = 'bar'; public function setBar($newBar) { if(!is_string($bar)) { trigger_error('$newBar deveria ser uma string!', E_USER_ERROR); } else { $this->bar = $newBar; } } public function getBar() { return $this->bar; } } $foo = new Foo(); echo $foo->bar; // ERRO!!! echo $foo->getBar(); // bar $foo->setBar('bazzinga'); echo $foo->getBar(); // bazzinga Protected: é quase como private, entretanto, a visibilidade não fica restrita somente à classe, mas a todas aquelas que se relacionam a ela por meio de herança. Exemplo simples: <?php class A { private $privateA = 'Private A'; protected $protectedA = 'Protected A'; public function getPrivateA() { return $this->privateA; } public function getProtectedA() { return $this->protectedA; } } class B extends A { private $privateB = 'Private B'; public function getPrivateB() { return 'B.' . $this->privateB; } public function getPrivateA() { return 'B.' . $this->privateA; } public function getProtectedA() { return 'B.' . $this->protectedA; } } $a = new A(); $b = new B(); echo $a->getPrivateA() . PHP_EOL; echo $a->getProtectedA() . PHP_EOL; echo $b->getPrivateB() . PHP_EOL; echo $b->getProtectedA() . PHP_EOL; echo $b->getPrivateA() . PHP_EOL; Saída: Private AProtected A B.Private B B.Protected A Notice: Undefined property: B::$privateA in D:\wamp\www\teste.php on line 23 B. Compartilhar este post Link para o post Compartilhar em outros sites
felipe592 1 Denunciar post Postado Agosto 25, 2012 Public: visível em qualquer escopo, você pode acessar métodos e propriedades e alterar propriedades livremente, sem nenhum tipo de controle. O recomendado é utilizar public SOMENTE PARA MÉTODOS. Ex.: class Foo { public $bar = 'bar'; public function getBar() { return $this->bar; } } $foo = new Foo(); // Dá para mostrar $bar assim: echo $foo->bar; // Dá para alterá-la assim: $foo->bar = 'bazzinga'; // Outra maneira de pegar seu valor é: echo $foo->getBar(); Private: visível somente para a classe. Geralmente, utilizamos private para propriedades e métodos internos das classes, os quais não podem, ou não precisam ser public. Para propriedades, normalmente cria-se métodos de acesso (setters e getters) que além de setar e retornar valores, muitas vezes executam alguma validação. Ex.: class Foo { private $bar = 'bar'; public function setBar($newBar) { if(!is_string($bar)) { trigger_error('$newBar deveria ser uma string!', E_USER_ERROR); } else { $this->bar = $newBar; } } public function getBar() { return $this->bar; } } $foo = new Foo(); echo $foo->bar; // ERRO!!! echo $foo->getBar(); // bar $foo->setBar('bazzinga'); echo $foo->getBar(); // bazzinga Protected: é quase como private, entretanto, a visibilidade não fica restrita somente à classe, mas a todas aquelas que se relacionam a ela por meio de herança. Exemplo simples: <?php class A { private $privateA = 'Private A'; protected $protectedA = 'Protected A'; public function getPrivateA() { return $this->privateA; } public function getProtectedA() { return $this->protectedA; } } class B extends A { private $privateB = 'Private B'; public function getPrivateB() { return 'B.' . $this->privateB; } public function getPrivateA() { return 'B.' . $this->privateA; } public function getProtectedA() { return 'B.' . $this->protectedA; } } $a = new A(); $b = new B(); echo $a->getPrivateA() . PHP_EOL; echo $a->getProtectedA() . PHP_EOL; echo $b->getPrivateB() . PHP_EOL; echo $b->getProtectedA() . PHP_EOL; echo $b->getPrivateA() . PHP_EOL; Saída: Opá! Muito Obrigado me tira outra duvida a funcao extends é usada para continuar uma class? Opá! Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Tiago Souza Ribeiro 8 Denunciar post Postado Agosto 25, 2012 Opá! Muito Obrigado me tira outra duvida a funcao extends é usada para continuar uma class? Usa-se extends quando quer herdar os métodos, propriedades e tudo mais de uma classe, ex: você cria uma classe chamada MyPDO extendendo a classe PDO. Todos recursos da PDO que estiverem com visibilidade protected ou public estarão disponíveis na MyPDO como parte dela. Se a explicação ficou ruim, é culpa do sono Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Agosto 25, 2012 me tira outra duvida a funcao extends é usada para continuar uma class? Exato, o nome correto é Herança, herdar os métodos e objetos da class anterior em uma nova class, como no exemplo citado pelo Henrique. Também preste atenção no post do amigo Tiago. Compartilhar este post Link para o post Compartilhar em outros sites