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)
Commenti recenti