Métodos e propriedades estáticas do PHP

Resumo : neste tutorial, você aprenderá sobre métodos estáticos e propriedades estáticas do PHP e entenderá as diferenças entre  $thise self.

Introdução aos métodos e propriedades estáticas do PHP

Até agora, você aprendeu como definir uma classe que consiste em métodos e propriedades. Para usar os métodos e propriedades da classe, você cria um objeto e acessa esses métodos e propriedades através do objeto.

Como esses métodos e propriedades estão vinculados a uma instância da classe, eles são chamados de métodos e propriedades de instância.

PHP permite que você acesse os métodos e propriedades no contexto de uma classe em vez de um objeto. Tais métodos e propriedades são métodos e propriedades de classe.

Os métodos e propriedades de classe são chamados de métodos e propriedades estáticas.

Métodos estáticos

Para definir um método estático, coloque a staticpalavra-chave na frente da functionpalavra-chave da seguinte maneira:


<?php

class MyClass
{
	public static function staticMethod()
	{
	}
}
Linguagem de código:  HTML, XML  ( xml )

Como um método estático está vinculado a uma classe, não a uma instância individual da classe, você não pode acessar $thisdentro do método. No entanto, você pode acessar uma variável especial chamada self. A selfvariável significa a classe atual.

A seguir mostramos como chamar um método estático de dentro da classe:

self::staticMethod(arguments);Linguagem de código:  PHP  ( php )

Para chamar um método estático de fora da classe, use a seguinte sintaxe:

className::staticMethod(arguments)Linguagem de código:  JavaScript  ( javascript )

Por exemplo:

MyClass::staticMethod()Linguagem de código:  CSS  ( css )

O exemplo a seguir define a HttpRequestclasse que possui um método estático uri()que retorna o URI da solicitação HTTP atual:

class HttpRequest
{
	public static function uri(): string
	{
		return strtolower($_SERVER['REQUEST_URI']);
	}
}Linguagem de código:  PHP  ( php )

O seguinte chama o uri()método estático da HttpRequestclasse:

echo HttpRequest::uri();Linguagem de código:  PHP  ( php )

Se a solicitação HTTP atual for https://tutorials.acervolima.com/php-static-method/, o uri()método retornará /php-static-method/.

Propriedades estáticas

Para definir uma propriedade estática, você também usa a staticpalavra-chave:

public static $staticProperty;Linguagem de código:  PHP  ( php )

Por exemplo:

class MyClass
{
	public static $staticProperty;

	public static function staticMethod()
	{
	}
}Linguagem de código:  PHP  ( php )

Para acessar uma propriedade estática pública fora da classe, você também usa o nome da classe com o ::operador:

MyClass::$staticProperty;Linguagem de código:  PHP  ( php )

Assim como os métodos estáticos, para acessar propriedades estáticas de dentro da classe, você usa o selfem vez do  $thisseguinte:

self::staticPropertyLinguagem de código:  PHP  ( php )

eu mesmo vs. $isto

A tabela a seguir ilustra as diferenças entre selfe $this:

$this self
Representa uma instância da classe ou objeto Representa uma classe
Sempre comece com um cifrão ($) Nunca comece com um cifrão( $)
É seguido pelo operador de objeto ( ->) É seguido pelo ::operador
O nome da propriedade após o operador de objeto ( ->) não possui o cifrão ($), por exemplo, $this->property. O nome da propriedade estática após o ::operador sempre tem o cifrão ( $).

Exemplo de métodos estáticos e propriedades do PHP

Suponha que você queira criar uma Appclasse para sua aplicação web. E a Appclasse deve ter uma e apenas uma instância durante o ciclo de vida da aplicação. Em outras palavras, o Appdeve ser um singleton.

A seguir ilustra como definir a classe App usando métodos e propriedades estáticas:

<?php

class App
{
	private static $app = null;

	private function __construct()
	{
	}

	public static function get() : App
	{
		if (!self::$app) {
			self::$app = new App();
		}

		return self::$app;
	}

	public function bootstrap(): void
	{
		echo 'App is bootstrapping...';
	}
}Linguagem de código:  HTML, XML  ( xml )

Como funciona:

Primeiro, defina uma propriedade estática chamada $app e inicialize seu valor como null:

private static $app = null;Linguagem de código:  PHP  ( php )

Segundo, torne o construtor privado para que a classe não possa ser instanciada de fora:

private function __construct()
{
}Linguagem de código:  PHP  ( php )

Terceiro, defina um método estático chamado get()que retorne uma instância da Appclasse:

public static function get() : App
{
	if (!self::$app) {
		self::$app = new App();
	}

	return self::$app;
}Linguagem de código:  PHP  ( php )

O get()método cria uma instância do Appse ainda não foi criado, caso contrário, simplesmente retorna a instância do App. Observe que o get()método usa o selfpara acessar a $apppropriedade estática.

Quarto, o bootstrap()método serve apenas para fins de demonstração. Na prática, você pode colocar o código que inicializa a aplicação neste método.

A seguir mostramos como usar a Appclasse:

<?php

$app = App::get();
$app->bootstrap();Linguagem de código:  HTML, XML  ( xml )

Neste código, chamamos o get()método estático da Appclasse e invocamos o bootstrap()método da Appinstância de.

Resumo

  • Métodos e propriedades estáticos estão vinculados a uma classe, não a objetos individuais da classe.
  • Use a staticpalavra-chave para definir métodos e propriedades estáticas.
  • Use a selfpalavra-chave para acessar métodos e propriedades estáticas dentro da classe.

Deixe um comentário

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