♻️ Massimizzare la compatibilità PHP per WordPress 6.4 e la directory dei plugin
WordPress 6.4 "Shirley" è stato rilasciato. Si consiglia di eseguirlo con PHP 8.1 o 8.2, ma la versione minima di PHP supportata è ancora la 7.0.
Pertanto, i nostri plugin WordPress devono (per quanto possibile) supportare PHP fino alla versione 7.0 ed essere compatibili con PHP 8.1 e 8.2.
Il modo più logico per farlo è programmare i nostri plugin utilizzando PHP 7.0, evitando però di:
- Utilizzare funzionalità deprecate in PHP 7.x, poiché queste saranno state rimosse in PHP 8.x
- Utilizzare funzionalità deprecate in PHP 8.x, poiché queste genereranno avvisi
Per essere sicuri che il codice del plugin sia compatibile, dobbiamo testarlo accuratamente su diversi ambienti, eseguendo le varie versioni di PHP.
Programmare in PHP 7.x presenta uno svantaggio evidente: il codice del plugin deve essere compatibile con PHP 8.x, ma non può utilizzare nessuna delle sue funzionalità, come gli union type, l'espressione match, l'operatore nullsafe e molte altre.
Esiste un'alternativa migliore.
Effettuare il downgrade del codice PHP da 8.x a 7.x
Invece di programmare in PHP 7 e assicurarci che funzioni con PHP 8, possiamo fare il contrario: programmare il plugin in PHP 8 ed effettuarne il downgrade a PHP 7.
Questo è possibile grazie a Rector, uno strumento per automatizzare il refactoring del codice PHP.
Rector fornisce regole per effettuare il downgrade del codice da PHP 8.1 a PHP 7.2. Ciò significa che possiamo utilizzare queste funzionalità moderne nei nostri plugin WordPress, poiché possono essere sottoposte a downgrade in codice PHP 7.2.
Ad esempio, la regola DowngradeMatchToSwitchRector converte l'operatore match in un operatore switch:
class SomeClass
{
public function run()
{
- $message = match ($statusCode) {
- 200, 300 => null,
- 400 => 'not found',
- default => 'unknown status code',
- };
+ switch ($statusCode) {
+ case 200:
+ case 300:
+ $message = null;
+ break;
+ case 400:
+ $message = 'not found';
+ break;
+ default:
+ $message = 'unknown status code';
+ break;
+ }
}
}Da notare che le regole servono solo per effettuare il downgrade fino a PHP 7.2, non fino a PHP 7.1 e 7.0. Tuttavia, questo non è un grosso problema, poiché queste due versioni di PHP combinate rappresentano solo il 3% dei siti WordPress.
Effettuare il downgrade del codice è un approccio migliore, perché:
- Programmando in PHP 8.1, siamo assolutamente certi che il nostro codice sarà compatibile con PHP 8.1 e 8.2.
- Finché utilizziamo funzionalità PHP per le quali esistono regole di downgrade, il codice funzionerà anche in PHP 7.2, 7.3 e 7.4.
- Possiamo utilizzare le funzionalità di PHP 8.x, come gli union type, l'espressione match, l'operatore nullsafe e molte altre.
Da notare che non tutte le funzionalità di PHP 8.x sono disponibili. Ad esempio, non esiste (ancora) una regola per effettuare il downgrade delle enumerazioni, quindi non possiamo utilizzarle.
Per quanto riguarda i test, non c'è alcuna differenza: dobbiamo testare accuratamente il plugin anche su diversi ambienti, eseguendo le varie versioni di PHP, per stare sul sicuro.
Come effettuare il downgrade del codice
Gato GraphQL è sviluppato con PHP 8.1 e sottoposto a downgrade a PHP 7.2 per la produzione.
Il downgrade del codice, il suo test e la successiva pubblicazione del plugin per la produzione sono tutti automatizzati tramite workflow di GitHub Actions:
downgrade_php_tests.yml: effettua il downgrade del codice e lo analizza utilizzando PHP 7.2generate_plugins.yml: genera il plugin per la pubblicazione, effettuandone il downgrade a PHP 7.2integration_tests.yml: installa il plugin appena generato in un insieme di istanze InstaWP che eseguono diverse versioni di PHP ed esegue i test di integrazione
Per saperne di più, ho scritto alcuni articoli su questo argomento:
- 🦸🏿♂️ Gato GraphQL è ora transpilato da PHP 8.0 a 7.1
- Transpiling PHP code from 8.0 to 7.x via Rector
- Coding in PHP 7.4 and deploying to 7.1 via Rector and GitHub Actions
Spero che lo troviate utile 🙏