Resumo : neste tutorial, você aprenderá sobre os modificadores de acesso do PHP, incluindo público e privado, e entenderá as diferenças entre eles.
Introdução aos modificadores de acesso PHP
No tutorial de objetos e classes , você aprendeu como usar o public
modificador de acesso com propriedades e métodos.
PHP tem três modificadores de acesso: public
, private
e protected
. Neste tutorial, você se concentrará nos modificadores de acesso public
e private
.
- O
public
modificador de acesso permite acessar propriedades e métodos dentro e fora da classe. - O
private
modificador de acesso impede que você acesse propriedades e métodos de fora da classe.
O modificador de acesso público
Quando você coloca a public
palavra-chave na frente de uma propriedade ou método, a propriedade ou método se torna público. Isso significa que você pode acessar a propriedade e o método dentro e fora da classe.
O exemplo a seguir ilustra o public
modificador de acesso:
<?php
class Customer
{
public $name;
public function getName()
{
return $this->name;
}
}
Linguagem de código: HTML, XML ( xml )
Neste exemplo, a Customer
classe possui uma public
propriedade ( $name
) e public
um método ( getName()
). E você pode acessar a propriedade e o método dentro e fora da classe. Por exemplo:
<?php
class Customer
{
public $name;
public function getName()
{
return $this->name;
}
}
$customer = new Customer();
$customer->name = 'Bob';
echo $customer->getName(); // Bob
Linguagem de código: HTML, XML ( xml )
Como funciona.
- Primeiro, crie uma nova instância da
Customer
classe. - Segundo, defina o valor da
$name
propriedade como'Bob'
. - Terceiro, chame o
getName()
método do$customer
objeto e exiba o nome.
O modificador de acesso privado
Para impedir o acesso a propriedades e métodos de fora da classe, você usa o private
modificador de acesso.
O exemplo a seguir altera $name
a propriedade da Customer
classe de public
para private
:
<?php
class Customer
{
private $name;
public function getName()
{
return $this->name;
}
}
Linguagem de código: HTML, XML ( xml )
Se você tentar acessar a $name
propriedade de fora da classe, receberá um erro. Por exemplo:
$customer = new Customer();
$customer->name = 'Bob';
Linguagem de código: PHP ( php )
Erro:
Fatal error: Uncaught Error: Cannot access private property Customer::$name
Linguagem de código: PHP ( php )
Então, como você acessa uma private
propriedade?
Para manipular o valor de uma propriedade privada, você precisa definir um método público e usar o método para gerenciar uma propriedade privada.
Normalmente, você precisa definir dois tipos de métodos públicos para gerenciar uma propriedade privada:
- Um getter retorna o valor da propriedade privada.
- Um setter define um novo valor para a propriedade privada.
Por convenção, o getter e o setter têm o seguinte nome:
getPropertyName
setPropertyName
A Customer
classe a seguir define getter( getName
) e setter( setName)
para obter e definir o valor da $name
propriedade:
<?php
class Customer
{
private $name;
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
Linguagem de código: HTML, XML ( xml )
E a seguir mostra como usar os métodos setName()
e getName()
para definir e obter o valor da $name
propriedade:
$customer = new Customer();
$customer->setName('Bob');
echo $customer->getName();
Linguagem de código: PHP ( php )
Por que você precisa de propriedade privada?
Pode ser mais rápido usar o public
modificador de acesso para propriedades em vez de usar uma propriedade privada com o getter/setter público.
No entanto, ao usar a private
propriedade, você pode impedir o acesso direto à propriedade de fora da classe.
Além disso, os métodos getter/setter garantem que a única forma de acessar a propriedade seja através desses métodos. E os métodos getter/setter podem fornecer lógica personalizada para manipular o valor da propriedade.
Por exemplo, se quiser que o valor da $name
propriedade não fique em branco, você pode adicionar a lógica de validação ao setName()
método da seguinte forma:
<?php
class Customer
{
private $name;
public function setName($name)
{
$name = trim($name);
if ($name == '') {
return false;
}
$this->name = $name;
return true;
}
public function getName()
{
return $this->name;
}
}
$customer = new Customer();
$customer->setName(' Bob ');
echo $customer->getName();
Linguagem de código: HTML, XML ( xml )
No setName()
método:
- Primeiro, remova todos os espaços em branco iniciais e finais usando a
trim()
função. - Segundo, retorne false se o
$name
argumento estiver em branco. Caso contrário, atribua-o à$name
propriedade e retornetrue
.
Resumo
- Use o
public
modificador de acesso para permitir acesso a propriedades e métodos dentro e fora da classe. - Use o
private
modificador de acesso para impedir o acesso de fora da classe. - Use
private
propriedades com um par de métodos getter/setter públicos.