Ir para conteúdo

POWERED BY:

Arquivado

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

felipe592

diferença entre protected,private

Recommended Posts

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

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

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 A

Protected 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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.