Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PHP 7.3: virgola finale nelle chiamate a funzione

A partire da PHP 7.3 è possibile richiamare le funzioni con virgola finale, scopriamo in quali casi è possibile utilizzare questo costrutto e in quali no.
A partire da PHP 7.3 è possibile richiamare le funzioni con virgola finale, scopriamo in quali casi è possibile utilizzare questo costrutto e in quali no.
Link copiato negli appunti

PHP 7.3 considera come sintassi valida la possibilità di richiamare le funzioni con virgola finale. Fino al PHP 7.2 gli unici casi in cui era possibile utilizzare una virgola finale erano:

  • nella definizione di namespace raggruppati:

use Foo\Bar\{
    Foo,
    Bar,
};

  • negli array:

$foo = [
    'foo',
    'bar',
];

Con l'ultima versione di PHP possiamo anche definire funzioni che terminano con una virgola:

unset(
    $foo,
    $bar,
    $baz,
);

Consentire una virgola finale nelle chiamate di funzione rende più facile aggiungere argomenti in molti contesti in cui è comune chiamare una funzione con molti argomenti; specialmente nelle funzioni variadiche.

Una funzione variadica è una funzione che accetta un numero arbitrario di elementi.

Utilizzi comuni

Vediamo una serie di esempi in cui il suo utilizzo durante lo sviluppo risulta essere molto comodo.

echo $twig->render(
    'index.html',
    compact(
        'title',
        'body',
        'comments',
    )
);
$newArray = array_merge(
    $arrayOne,
    $arrayTwo,
    ['foo', 'bar'],
);
var_dump(
    $whatIsInThere,
    $probablyABugInThisOne,
    $oneMoreToCheck,
);

Gli esempi appena elencati fanno capo tutti a delle casistiche in cui è necessario passare ad una funzione un numero di argomenti che può cambiare durante lo sviluppo.

Il suo utilizzo non è limitato alle sole funzioni (o costrutti in caso di isset() o unset()) ma anche nei metodi di una classe:

class Foo
{
    public function __construct(...$args) {
      //
    }
    public function bar(...$args) {
      //
    }
    public function __invoke(...$args) {
      //
    }
}
$foo = new Foo(
    'constructor',
    'bar',
);
$foo->bar(
    'method',
    'bar',
);
$foo(
    'invoke',
    'bar',
);

E nelle closure:

$bar = function(...$args) {
  //
};
$bar(
  'closure',
  'bar',
);

Casi d'uso non ammessi

Abbiamo visto cosa cambia con la versione 7.3. Vediamo invece cosa resta invariato e quindi non concesso:

  • dichiarazione di una funzione/metodo:

function bar($a, $b,) {
    //
}
//Parse error: syntax error, unexpected ')', expecting variable (T_VARIABLE) in ... on line 2

  • virgole indipendenti:

foo(,);
//Parse error: syntax error, unexpected ',' in ... on line 3

  • virgole multiple e iniziali:

foo('function', 'bar',,);
//Parse error: syntax error, unexpected ',', expecting ')' in ... on line 3
foo(, 'function', 'bar');
//Parse error: syntax error, unexpected ',' in ... on line 3

Ti consigliamo anche