Eu tenho uma pergunta sobre a função estática no php.
vamos supor que eu tenha uma aula
class test {
public function sayHi() {
echo 'hi';
}
}
se eu fizer test::sayHi();
isso funciona sem problemas.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
funciona bem.
Quais são as diferenças entre a primeira e a segunda classe?
O que há de especial em uma função estática?
Respostas:
Na primeira classe,
sayHi()
é na verdade um método de instância que você está chamando como um método estático e você se safa porquesayHi()
nunca faz referência a$this
.As funções estáticas são associadas à classe, não a uma instância da classe. Como tal,
$this
não está disponível em um contexto estático ($this
não aponta para nenhum objeto).fonte
Simplesmente, as funções estáticas funcionam independentemente da classe a que pertencem.
$ isso significa que este é um objeto desta classe. Não se aplica a funções estáticas.
fonte
Toda a diferença é que você não é
$this
fornecido dentro da função estática. Se você tentar usar$this
, obterá umFatal error: Using $this when not in object context
.Bem, ok, uma outra diferença: um
E_STRICT
aviso é gerado pelo seu primeiro exemplo.fonte
$this
refere-se ao objeto atual. Em uma função estática, não há objeto atual; a função existe na classe sem necessidade ou referência a uma instância de objeto dessa classe.Chamar métodos não estáticos gera estaticamente um aviso de nível E_STRICT.
fonte
Em suma, você não tem o objeto como $ this no segundo caso, pois o método estático é uma função / método da classe e não a instância do objeto.
fonte
Depois de tentar exemplos (PHP 5.3.5), descobri que em ambos os casos de definição de funções você não pode usar
$this
operador para trabalhar em funções de classe. Então eu não consegui encontrar uma diferença neles ainda. :(fonte