PHP7 – what’s new

Spread the love

Oggi inizio a pubblicare delle pillole di PHP che riguardano le nuove caratteristiche introdotte nel PHP7. Seguono quelle enunciate nel sito php.net ma le commento e aggiungo qualche esempio.

Comincio con 

Passaggio di un numero indefinito di argomenti ad una funzione

Questo argomento non rapresenta una novità introdotta in PHP 7 ma è in qualche modo propedeutico ad altre novità. Generalmente una funzione ha un numero di argomenti definito in sede di dichiarazione. Ad esempio

// 3.php

function sum($a, $b) {
    return $a + $b;
}

echo sum(1, 2, 3); 

Qui però in sede di invocazione della funzione, passiamo più parametri di quelli dichiarati. Ciò che accade è che la somma venga eseguita solo sui primi due argomenti ma non c’è alcun errore sull’invocazione della API della funzione. Questo è quanto accade sia in PHP 7 che nelle versioni precedenti

$ php 3.php 
3

Come si vede, il programma ha sommato solo i primi due argomenti (1 e 2) e non il terzo (3). Questo comportamento è molto diverso da quello di altri linguaggi. Nella stessa situazione, ad esempio, un programma Python genera un errore:

#!/usr/bin/python
# 3.py

def sum(a,b):
   return a+b
   
print sum(1,2,3)

Output:

$ ./3.py 
Traceback (most recent call last):
  File "./3.py", line 6, in <module>
    print sum(1,2,3)
TypeError: sum() takes exactly 2 arguments (3 given)

Dunque PHP non da’ errore se la lista degli argomenti passati alla funzione differisce in numero da quella indicata nella dichiarazione, semplicemente ignora i parametri che in numero eccedono la definizione.

Dalla versione 5.6 tuttavia è stato introdotto un particolare operatore “” (detto “… token” nel sito di PHP) che consente di rendere dinamico il numero degli argomenti passati alla funzione che possono essere contenuti in un array di dimensione decisa a runtime.

// 4.php
function sumOfInts(int ...$ints) {
    return array_sum($ints);
}

var_dump(sumOfInts(1, 2));
var_dump(sumOfInts(2, 3, 4));

che fornisce l’output

$ php 4.php 
/var/www/html/php7/4.php:7:
int(3)
/var/www/html/php7/4.php:8:
int(9)

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.