Resumo : neste tutorial, você aprenderá sobre métodos estáticos e propriedades estáticas do PHP e entenderá as diferenças entre $this
e 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 static
palavra-chave na frente da function
palavra-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 $this
dentro do método. No entanto, você pode acessar uma variável especial chamada self
. A self
variá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 HttpRequest
classe 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 HttpRequest
classe:
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 static
palavra-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 self
em vez do $this
seguinte:
self::staticProperty
Linguagem de código: PHP ( php )
eu mesmo vs. $isto
A tabela a seguir ilustra as diferenças entre self
e $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 App
classe para sua aplicação web. E a App
classe deve ter uma e apenas uma instância durante o ciclo de vida da aplicação. Em outras palavras, o App
deve 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 App
classe:
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 App
se ainda não foi criado, caso contrário, simplesmente retorna a instância do App. Observe que o get()
método usa o self
para acessar a $app
propriedade 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 App
classe:
<?php
$app = App::get();
$app->bootstrap();
Linguagem de código: HTML, XML ( xml )
Neste código, chamamos o get()
método estático da App
classe e invocamos o bootstrap()
método da App
instância de.
Resumo
- Métodos e propriedades estáticos estão vinculados a uma classe, não a objetos individuais da classe.
- Use a
static
palavra-chave para definir métodos e propriedades estáticas. - Use a
self
palavra-chave para acessar métodos e propriedades estáticas dentro da classe.