Resumo : neste tutorial, você aprenderá como usar o protected
modificador de acesso PHP para permitir que classes filhas acessem propriedades e métodos da classe pai.
Introdução ao modificador de acesso protegido PHP
No tutorial do modificador de acesso , você aprendeu sobre os modificadores de acesso public
e private
. As public
propriedades e métodos podem ser acessados dentro e fora da classe, enquanto as private
propriedades e métodos podem ser acessados apenas dentro da classe.
As protected
propriedades e métodos podem ser acessados de dentro da classe e de qualquer classe que a estenda.
Assim como o modificador de acesso private
e public
, você prefixa o nome da propriedade com a palavra-chave protected para definir uma propriedade protegida:
protected $propertyName;
Linguagem de código: PHP ( php )
Bem como um método:
protected function methodName()
{
//...
}
Linguagem de código: PHP ( php )
Exemplo de propriedade protegida em PHP
Primeiro, defina a Customer
classe que possui uma propriedade privada $name
:
<?php
class Customer
{
private $name;
public function __construct($name)
{
$this->name = $name;
}
}
Linguagem de código: HTML, XML ( xml )
Segundo, defina a VIP
classe que estende a Customer
classe. A VIP
classe possui um método getFormattedName()
que acessa a $name
propriedade:
<?php
class VIP extends Customer
{
public function getFormattedName()
{
return ucwords($this->name);
}
}
Linguagem de código: HTML, XML ( xml )
Terceiro, crie uma instância da VIP
classe e chame o getFormattedName()
método:
<?php
$alex = new VIP('alex ferguson');
echo $alex->getFormattedName();
Linguagem de código: HTML, XML ( xml )
PHP emitiu o seguinte erro:
PHP Notice: Undefined property: VIP::$name in ...
Linguagem de código: PHP ( php )
Como $name
a propriedade é privada, você só pode acessá-la dentro da Customer
classe. Para permitir que a classe filha acesse a $name
propriedade, você pode alterá-la para uma propriedade protegida como esta:
<?php
class Customer
{
protected $name;
public function __construct($name)
{
$this->name = $name;
}
}
Linguagem de código: HTML, XML ( xml )
Se você executar o script novamente, verá o seguinte na saída:
Alex Ferguson
Exemplo de método protegido por PHP
Vejamos um exemplo de uso dos métodos protegidos.
Primeiro, defina a Customer
classe:
<?php
class Customer
{
protected $name;
public function __construct($name)
{
$this->name = $name;
}
protected function format()
{
return ucwords($this->name);
}
public function getName()
{
return $this->format($this->name);
}
}
Linguagem de código: HTML, XML ( xml )
A Customer
classe possui a propriedade protegida $name
e o método protegido format()
. O format()
método retorna $name
com o primeiro caractere de cada palavra convertido em maiúscula.
A Customer
classe também possui o método público getName()
que chama o format()
método para retornar o nome formatado.
Segundo, defina a VIP
classe que estende a Customer
classe:
<?php
class VIP extends Customer
{
protected function format()
{
return strtoupper($this->name);
}
}
Linguagem de código: HTML, XML ( xml )
A classe VIP possui o método de substituição format()
que retorna $name
com todos os caracteres convertidos para maiúsculas. O format()
método também está protegido.
Terceiro, crie uma nova instância da Customer
classe e exiba o nome:
$bob = new Customer('bob allen');
echo $bob->getName(); // Bob Allen
Linguagem de código: PHP ( php )
Saída:
Bob Allen
Neste exemplo, o getName()
método invoca o format()
método da Customer
classe e retorna o nome com o primeiro caractere de cada palavra convertido para maiúscula.
Por fim, crie uma nova instância da classe VIP e mostre o nome:
$alex = new VIP('alex ferguson');
echo $alex->getName(); // ALEX FERGUSON
Linguagem de código: PHP ( php )
Saída:
ALEX FERGUSON
Desta vez, o getName()
método chama o format()
da VIP
classe em vez da Customer
classe. Portanto, você vê que o nome é convertido em letras maiúsculas.
Resumo
- Usar
protected
propriedades e métodos só pode ser acessado dentro da classe e em qualquer classe filha da classe.