In definitiva, le prestazioni non dovrebbero essere la vostra preoccupazione quando si aggiungono dichiarazioni di tipo. Esistono per semplificare la vita del programmatore, non per l'interprete. Usali se pensi che ti saranno utili. È improbabile che si utilizzino o meno le dichiarazioni di tipo come principale fattore determinante delle prestazioni del codice.
Con ciò detto, attualmente (PHP 7.0) c'è in realtà una piccola prestazione penalità quando si usano le dichiarazioni di tipo, perché PHP ora deve controllare i tipi di valori che si passano dentro e fuori dalle funzioni. È più veloce non controllare affatto, che è ciò che accade quando non si ha una dichiarazione di tipo.
Tuttavia, è un po 'più sfumato di quello, e la situazione sta cambiando.
forze tipizzazione forte di passare i tipi corretti
Se si utilizza la tipizzazione forte, devi passare un valore del tipo ideale (ad esempio int), invece di essere in grado di passare qualche altro tipo (es. stringa) e convertirlo in PHP per te. Passare il tipo corretto è più veloce che avere la conversione PHP da un altro tipo per te: digitare le conversioni richiede tempo.
dichiarazioni di tipo possono evitare ripetute conversioni di tipo
Se si utilizza dichiarazioni di tipo, sia con la tipizzazione forte o no, di solito si evita di conversioni di tipo ripetute per lo stesso valore.
Normalmente, se si dispone di una funzione che esegue diverse operazioni di numero e si passa a un argomento di stringa, PHP dovrà convertirlo nel tipo di numero appropriato (int o float) ogni volta che esegue un'operazione con esso.
Ma se si dispone di una dichiarazione di tipo su quell'argomento, viene convertito una sola volta, automaticamente (modalità di digitazione debole) o perché l'hai convertito in modo esplicito.
dichiarazioni di tipo consentono di PHP per elidere tipo di controlli
dichiarazioni di tipo consentono alle garanzie PHP di runtime che a volte può utilizzare per evitare di tipo controlli che ha a che fare altrimenti. Ad esempio, assumere la seguente riga di codice:
$a = $b * $c;
Senza dichiarazioni di tipo, PHP deve prima fare un controllo di tipo interno $b
e $c
prima che possa effettivamente moltiplicare; PHP deve assicurarsi che siano entrambi i tipi di numeri, convertirli se non lo sono, e quindi eseguire il tipo appropriato di moltiplicazione (int
× int
, float
× int
, ecc.).
Ma se hai dichiarato in anticipo i tipi di $b
e $c
, PHP non deve controllarli qui e può immediatamente eseguire la moltiplicazione effettiva. È più veloce Ciò è particolarmente vero se si eseguono più operazioni con queste variabili all'interno della funzione.
Questa ottimizzazione è implementata in PHP 7.1 quando si utilizza OPcache.
È possibile implementare ottimizzazioni simili per eliminare anche i controlli di tipo argomento e valore restituito. Ad esempio, se una funzione dichiara che un parametro è un int, non è necessario controllarne nuovamente il tipo se poi passa quell'argomento a un'altra funzione che si aspetta anche un int. PHP 7.1 può attualmente eliminare alcuni controlli di tipo restituiti non necessari (e altro ancora quando si utilizza OPcache), ma non i controlli di tipo argomento.
A causa di questi tipi di ottimizzazioni, la penalizzazione delle prestazioni per il codice con le dichiarazioni di tipo si sta riducendo e il potenziale di codice con le dichiarazioni di tipo è più rapido del codice senza futuro.
Gran parte dei suggerimenti tipo è che sono un aiuto * per il programmatore *. Con gli strumenti giusti (IDE intelligenti, correttori di tipo statico), è possibile evitare intere classi di errori prima ancora che il codice venga eseguito. Poiché PHP non è in genere compilato in anticipo, probabilmente non ci saranno molti miglioramenti delle prestazioni come farebbe un compilatore statico. – deceze