Quando si crea una classe:
<?php
namespace App;
use PHPUnit\Util\Exception;
class Complex
{
private float $real;
private float $imag;
public function getReal(): float
{
return $this->real;
}
il metodo pubblico getReal() può essere utilizzato in modo dinamico istanziando cioè prima la classe in un oggetto PHP e poi utilizzando il metodo dell’oggetto:
<?php $r = 1; $i = 0; $z = new Complex($r, $i); // istanzio l'oggetto $x = $z->getReal(); // uso il metodo // $x contiene "1"
Nella chiamata statica non si inizializza l’oggetto ma si sfrutta un suo metodo statico “al volo” che però deve essere dichiarato tale:
<?php
namespace App;
use PHPUnit\Util\Exception;
class Complex
{
private float $real;
private float $imag;
public static function className()
{
return "Complex";
}
Per utilizzarla dobbiamo invocarla così, senza creare prima un oggetto:
<?php print(Complex::classname()); // output: Complex
Attenzione! Nei metodi statici di PHP, non essendo nel loro contesto definito alcun oggetto, non si può fare riferimento alla variabile $this. Se ci si prova già l’IDE Intellij IDEA segnala il problema:
e comunque eseguendo il test si rileva lo stesso errore
Error Using $this when not in object context
Ultima perplessità: visto così sembra che un metodo statico possa resitutire solo costanti: non è così. Un metodo statico può restituire il risultato di un calcolo o dell’invocazione di un altra funzione definita all’esterno della classe (è il caos del metodo statico Route::get() di Laravel.

Commenti recenti