O que é o PHP equivalente a uma variável estática em outras línguas?

StackOverflow https://stackoverflow.com/questions/1198237

  •  20-09-2019
  •  | 
  •  

Pergunta

Eu estou querendo saber se o PHP tem um tipo de variável em classes que funciona como estático em outros idiomas.E com isso quero dizer a todos os objetos da mesma classe use a mesma variável e quando ele é atualizado em um é atualizado em cada um.Estática é perto, porque ele é compartilhado ao longo de todos os objetos, mas eu preciso ser capaz de atualizá-lo.Será que vou ter que usar globais para isso?

Foi útil?

Solução

Eu acho que estática é o que você quer. Você pode atualizar uma variável estática, basta fazê -lo em um "contexto estático" (ou seja, usando o operador ::.

class Class1 {
    protected static $_count = 0;

    public function incrementCount() {
        return self::$_count++;
    }
}

$instance1 = new Class1();
$instance2 = new Class1();
var_dump($instance1->incrementCount(), $instance2->incrementCount());

será lançado:

int 0

int 1

Outras dicas

A resposta correta é que não há equivalente no PHP para final, mas estático Parece o que você queria em primeiro lugar.

estático tem a propriedade de que terá o mesmo valor em todas as instâncias de uma classe, porque não está vinculada a uma instância específica.

Você precisará usar o :: operador para acessá -lo, porque sendo estático, você não pode usar ->.

Você posso Atualizar propriedades estáticas:

class A {
   protected static $_foo = 0;

   public function increment()
   {
       self::$_foo++;
   }   

   public function getFoo()
   {
       return self::$_foo;
   }
}


$instanceOne = new A();
$instanceTwo = new A();


$instanceOne->getFoo(); // returns 0

$instanceTwo->increment();

$instanceOne->getFoo(); // returns 1

Você pode simplesmente criar variáveis em um arquivo PHP dizer Constantes nomeadas.

--Constants.php-- $DATABASE_NAME = "mysql"

e incluir o arquivo em seu arquivo.Você pode alterar o seu valor.Ele aproxima-se do que você deseja, mas não é bom chamá-los de constantes devido a constantes não são destinadas a ser alterado, que é o que me confundiu :).

Eu penso static é a palavra -chave que você está procurando.

E não há nada que impeça um static Propriedade da Beeing "Atualizada", no PHP: é inicializada na primeira vez em que é definido, mantém o valor durante a execução do script PHP, mas você definitivamente pode defini -lo como um novo valor.

Não vejo por que fazer a variável estática não funciona para o que você descreveu (mas não tem nada a ver com a palavra -chave final)?

<?php

class Bla
{
    public static $var;

    public function __construct()
    {
        Bla::$var = Bla::$var + 1;
    }
}

$test = new Bla();
echo Bla::$var; // 1
$test = new Bla();
echo Bla::$var; // 2

?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top