PHP protegido

Resumo : neste tutorial, você aprenderá como usar o protectedmodificador 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 publice private. As publicpropriedades e métodos podem ser acessados ​​dentro e fora da classe, enquanto as privatepropriedades e métodos podem ser acessados ​​apenas dentro da classe.

As protectedpropriedades e métodos podem ser acessados ​​de dentro da classe e de qualquer classe que a estenda.

Assim como o modificador de acesso privatee 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 Customerclasse 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 VIPclasse que estende a Customerclasse. A VIPclasse possui um método getFormattedName()que acessa a $namepropriedade:

<?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 VIPclasse 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 $namea propriedade é privada, você só pode acessá-la dentro da Customerclasse. Para permitir que a classe filha acesse a $namepropriedade, 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 Customerclasse:

<?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 Customerclasse possui a propriedade protegida $namee o método protegido format(). O format()método retorna $namecom o primeiro caractere de cada palavra convertido em maiúscula.

A Customerclasse também possui o método público getName()que chama o format()método para retornar o nome formatado.

Segundo, defina a VIPclasse que estende a Customerclasse:


<?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 $namecom todos os caracteres convertidos para maiúsculas. O format()método também está protegido.

Terceiro, crie uma nova instância da Customerclasse e exiba o nome:

$bob = new Customer('bob allen');
echo $bob->getName(); // Bob AllenLinguagem de código:  PHP  ( php )

Saída:

 Bob Allen

Neste exemplo, o getName()método invoca o format()método da Customerclasse 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 FERGUSONLinguagem de código:  PHP  ( php )

Saída:

ALEX FERGUSON

Desta vez, o getName()método chama o format()da VIPclasse em vez da Customerclasse. Portanto, você vê que o nome é convertido em letras maiúsculas.

Resumo

  • Usar protectedpropriedades e métodos só pode ser acessado dentro da classe e em qualquer classe filha da classe.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *