Torna a PHP

PHP: Invocazione statica di un metodo di una classe

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:

Laravel - un metodo static PHP non riconosce la variabile $this
Laravel – un metodo static PHP non riconosce la variabile $this

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.