Modificadores de acesso PHP

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 publicmodificador de acesso com propriedades e métodos.

PHP tem três modificadores de acesso: public, privatee protected. Neste tutorial, você se concentrará nos modificadores de acesso publice private.

  • O publicmodificador de acesso permite acessar propriedades e métodos dentro e fora da classe.
  • O privatemodificador de acesso impede que você acesse propriedades e métodos de fora da classe.

O modificador de acesso público

Quando você coloca a publicpalavra-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 publicmodificador de acesso:

<?php

class Customer
{
	public $name;

	public function getName()
	{
		return $this->name;
	}
}Linguagem de código:  HTML, XML  ( xml )

Neste exemplo, a Customerclasse possui uma publicpropriedade ( $name) e publicum 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(); // BobLinguagem de código:  HTML, XML  ( xml )

Como funciona.

  • Primeiro, crie uma nova instância da Customerclasse.
  • Segundo, defina o valor da $namepropriedade como 'Bob'.
  • Terceiro, chame o getName()método do $customerobjeto 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 privatemodificador de acesso.

O exemplo a seguir altera $namea propriedade da Customerclasse de publicpara private:

<?php


class Customer
{
	private $name;

	public function getName()
	{
		return $this->name;
	}
}Linguagem de código:  HTML, XML  ( xml )

Se você tentar acessar a $namepropriedade 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::$nameLinguagem de código:  PHP  ( php )

Então, como você acessa uma privatepropriedade?

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 Customerclasse a seguir define getter( getName) e setter( setName)para obter e definir o valor da $namepropriedade:

<?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 $namepropriedade:

$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 publicmodificador de acesso para propriedades em vez de usar uma propriedade privada com o getter/setter público.

No entanto, ao usar a privatepropriedade, 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 $namepropriedade 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 $nameargumento estiver em branco. Caso contrário, atribua-o à $namepropriedade e retorne true.

Resumo

  • Use o publicmodificador de acesso para permitir acesso a propriedades e métodos dentro e fora da classe.
  • Use o privatemodificador de acesso para impedir o acesso de fora da classe.
  • Use privatepropriedades com um par de métodos getter/setter públicos.

Deixe um comentário

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