2016-05-09 33 views
19

Attualmente sto migrando il mio sito web da PHP5 a PHP7 e ho iniziato a utilizzare la funzionalità di digitazione severa che è stata aggiunta. Tuttavia, questo mi impone di iniziare a tutti i file con la seguente riga:Abilitare globalmente "strict_types" in PHP 7

<?php declare(strict_types=1); 

// All other code here 
// ... 

Quindi mi chiedevo, c'è qualche modo per consentire strict_types a livello globale usando qualcosa come php.ini o il file di configurazione di Apache in modo da non devo scrivere questa linea ogni volta, e se sì, come posso abilitare questo?

+2

No, questo non è possibile. –

+3

Puoi abilitare strict_types a livello globale usando 'sed',' awk' o un altro strumento di tua scelta per sostituire tutti i ' NikiC

+0

@NikiC I ' Sono piuttosto sicuro che un semplice find-replace in qualsiasi IDE avrebbe fatto lo stesso, mi stavo chiedendo se fosse possibile farlo in runtime come caratteristica standard in quanto non riuscivo a trovarne nulla – Paradoxis

risposta

19

Questo non è deliberatamente possibile, perché l'implementazione adottata dopo un estremamente lunga discussione di suggerimenti tipo scalare era questa: https://wiki.php.net/rfc/scalar_type_hints_v5

Si dà esplicitamente la scelta di come tipi scalari sono controllati al chiamante di qualsiasi funzione, non il suo autore, in modo che:

  • se si scrive una biblioteca con tipo scalare suggerimenti, le funzioni sono garantiti i tipi di parametri richiesti, anche se chiamato da codice non scritto in modo rigoroso (i tipi sono costretti invece)
  • se si scrive una libreria e si desidera una digitazione tradizionale debole, è comunque possibile utilizzare librerie che utilizzano suggerimenti tipo (poiché non obbligano a eseguire rigorosi controlli di tipo)
  • al contrario, se si scrive una libreria e si desidera digitare rigorosamente per le funzioni che chiamate, non è necessario richiedere che gli utenti della libreria abilitino la digitazione rigorosa
  • le funzioni incorporate funzionano allo stesso modo di quelle definite dall'utente e il codice esistente viene eseguito dallo stesso default
  • se si attiva la digitazione rigorosa, è necessario modificare il codice per gestirlo correttamente in ogni caso

Spetta quindi a voi indicare a PHP quali file sono stati scritti per utilizzare la modalità di tipo rigoroso e quali no; e il modo per farlo è usare la dichiarazione declare.

1

In sostanza no.

Perché se si richiedono solo librerie che utilizzano la modalità rigorosa si causerà una separazione non necessaria dei pacchetti. Considerate anche che l'opzione strict/weak types è solo un extra in PHP.

Problemi correlati