funzione statica php
Domanda
Ho una domanda per quanto riguarda funzione statica in php.
supponiamo che ho una classe
class test {
public function sayHi() {
echo 'hi';
}
}
se io test::sayHi();
funziona senza problemi.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
funziona pure.
Quali sono le differenze tra prima classe e seconda classe?
La particolarità di una funzione statica?
Soluzione
Nella prima classe, sayHi()
è in realtà un metodo di istanza che si sta chiamando come un metodo statico e si ottiene franca perché sayHi()
non si riferisce a $this
.
funzioni statiche sono associate con la classe, non un'istanza della classe. Come tale, $this
non è disponibile da un contesto statico ($this
non punta ad alcun oggetto).
Altri suggerimenti
Semplicemente, funzioni statiche funzionano indipendentemente dalla classe a cui appartengono.
$ questo significa, si tratta di un oggetto di questa classe. Essa non si applica alle funzioni statiche.
class test {
public function sayHi($hi = "Hi") {
$this->hi = $hi;
return $this->hi;
}
}
class test1 {
public static function sayHi($hi) {
$hi = "Hi";
return $hi;
}
}
// Test
$mytest = new test();
print $mytest->sayHi('hello'); // returns 'hello'
print test1::sayHi('hello'); // returns 'Hi'
L'intera differenza è, non si ottiene $this
fornito all'interno della funzione statica. Se si tenta di utilizzare $this
, si otterrà un Fatal error: Using $this when not in object context
.
Bene, bene, un altra differenza:. Un avvertimento E_STRICT
viene generato dal vostro primo esempio
Chiamare i metodi non statici genera staticamente un allarme per il livello E_STRICT.
In poche parole, non si deve l'oggetto da $ questo nel secondo caso, come il metodo statico è una funzione / metodo della classe non l'istanza di oggetto.
Dopo aver provato esempi (PHP 5.3.5), ho scoperto che in entrambi i casi di funzioni che definiscono non è possibile utilizzare operatore $this
per lavorare su funzioni di classe. Quindi non ho potuto trovare una differenza di loro ancora. : (