Notice: Undefined offset: 0 in /home/wwwroot/prtgames.co.uk/wp-content/themes/qoxag/core/helpers/functions/template.php on line 55
Article
Guide de l’autorité de traduction de code PHP
Guide de l’autorité de traduction de code PHP
by
mai 31, 2022
Idéalement, nous devrions utiliser PHP 8.0 (la dernière version au moment de la rédaction de cet article) pour tous nos sites Web et les mettre à jour immédiatement après la publication de la nouvelle version. Cependant, les développeurs doivent souvent utiliser des versions antérieures de PHP, par exemple lors de la création de plug – ins publics pour WordPress ou lors de l’utilisation du Code hérité qui empêche les mises à jour de l’environnement du serveur Web. Dans ces cas, nous pourrions abandonner l’espoir d’utiliser le dernier Code PHP. Mais il y a une meilleure option: Nous pouvons encore écrire le code source en PHP 8.0 et le transférer à une version précédente de PHP, même PHP 7.1.
Dans ce guide, nous vous apprendrons tout sur la conversion de code PHP. Qu’est – ce qu’une transplantation? Transpoling convertit le code source d’un langage de programmation à un code source équivalent dans le même langage de programmation ou dans un autre. Le transport n’est pas un nouveau concept dans le développement Web: les développeurs clients connaissent probablement Babel, l’outil de transport de code JavaScript. Babel convertit le code JavaScript de la version moderne d’ecmascript 2015 + en une version plus ancienne compatible avec l’ancien navigateur. Par exemple, compte tenu de la fonction flèche es2015:
[2, 4, 6]. Mapping ((n) = > n * 2)… Babel le convertira en sa version es5: [2, 4, 6]. Carte (fonction (n) {renvoie n * 2;}); Qu’est – ce qu’une traduction php? Une nouvelle fonctionnalité potentielle dans le développement web est la capacité de convertir le Code côté serveur, en particulier PHP. La traduction PHP fonctionne de la même façon que la traduction javascript: le code source de la version moderne de PHP est converti en équivalent de la version précédente de PHP. Comme dans l’exemple précédent, il y a une fonction fléchée dans PHP 7.4: $Nums = array _ Map (FN ($n) = > $N * 2, [2, 4, 6]… Peut être transféré à sa version
Version équivalente de PHP 7.3:
$Nums = array _ Map (fonction ($n) {renvoie $N * 2;}, [2, 4, 6]); Les fonctions fléchées peuvent être jetées parce qu’elles sont des bonbons grammaticals, c’est – à – dire une nouvelle syntaxe qui génère un comportement existant. C’est un fruit bas de gamme. Cependant, il y a aussi de nouvelles fonctionnalités qui créent de nouveaux comportements, de sorte que les anciennes versions de PHP n’auront pas de code équivalent. C’est le cas du type de fusion introduit dans PHP 8.0: function somefunction (float | int $param): String | float | int | NULL {\/…} Dans ces cas, la transmission reste possible tant que de nouvelles fonctionnalités sont nécessaires pour le développement et non pour la production. Par conséquent, nous pouvons simplement supprimer complètement la fonction du Code transparent sans conséquences graves.
Un exemple est le type d’union. Cette fonction vérifie s’il y a une différence entre le type d’entrée et la valeur fournie, ce qui aide à prévenir les erreurs. S’il y a conflit avec le type, il y a une erreur dans le développement et nous devrions capturer et corriger le code avant qu’il n’atteigne l’environnement de production. Par conséquent, nous pouvons supprimer la fonctionnalité du Code de production: fonction somefunction ($param) {\/…} Si l’erreur se produit toujours en production, le message d’erreur généré sera moins précis que le type de fusion. Ce désavantage potentiel est toutefois compensé par la possibilité d’utiliser d’abord le type d’union.
Dans un monde parfait, nous devrions être en mesure d’utiliser PHP 8.0 sur tous les sites Web et de les mettre à jour immédiatement après la sortie de la nouvelle version. Mais ce n’est pas toujours le cas. Découvrez tout ce que vous devez savoir sur les transpositions de code PHP Cliquez ici pour tweeter les avantages des transpositions de code PHP vous permettent d’encoder votre application avec la dernière version de PHP et de générer
Environnement dans lequel les versions précédentes de PHP sont exécutées. Ceci est particulièrement utile pour les développeurs qui créent des produits pour les anciens systèmes de gestion de contenu (SGC). Par exemple, WordPress prend toujours officiellement en charge PHP 5.6 (bien qu’il recommande PHP 7.4 +). La proportion de sites WordPress exécutant les versions 5.6 à 7.2 de PHP est de 34,8%, tandis que la proportion de sites exécutant toute autre version que la version 8.0 de PHP est de 99,5%:
Compter l’utilisation de WordPress par version. Par conséquent, les thèmes et plugins WordPress destinés à un public mondial sont susceptibles d’être encodés à l’aide d’anciennes versions de PHP afin d’accroître leur impact potentiel. Grâce à la transpiration, le Code peut être encodé en PHP 8.0 et peut encore être publié dans les versions précédentes de PHP pour être aussi orienté vers l’utilisateur que possible. En fait, toute application qui a besoin de prendre en charge n’importe quelle version PHP autre que la dernière version (même dans la gamme de versions PHP actuellement prises en charge) peut en bénéficier.
C’est le cas de Drupal, qui nécessite PHP 7.3. Grâce à la transpiration, les développeurs peuvent utiliser PHP 8.0 pour créer des modules Drupal accessibles au public et les publier en utilisant PHP 7.3. Un autre exemple est de créer du code personnalisé pour les clients qui, pour une raison ou une autre, ne peuvent pas exécuter PHP 8.0 dans leur environnement. Cependant, grâce à la transpiration, les développeurs peuvent encore coder leurs produits livrables en utilisant PHP 8.0 et les exécuter dans ces environnements hérités. Lorsque vous Transférez le Code PHP, vous pouvez toujours le faire à moins qu’il ne contienne des fonctionnalités PHP qui n’avaient pas de fonctionnalités Peer – to – peer dans les versions PHP précédentes.
Il peut s’agir d’une situation d’attribut, d’introduction
En PHP 8.0: \ # [someattr] Function somefunc () {} \ # [anotherattr] class someclass {} dans l’exemple précédent où vous avez utilisé des fonctions fléchées, vous pouvez transcrire le Code parce que les fonctions fléchées sont des sucres syntaxiques. Au lieu de cela, les attributs créent un nouveau comportement. Ce comportement peut également être utilisé en PHP 7.4 et plus tôt, mais il ne peut être codé que manuellement, c’est – à – dire qu’il ne peut pas être codé automatiquement en fonction d’outils ou de processus (ai peut fournir une solution, mais nous ne l’avons pas encore fait). Les attributs à utiliser dans le développement, tels que # [obsolète], peuvent être supprimés de la même manière que les types de fusion supprimés. Cependant, les propriétés qui changent le comportement de l’application en production ne peuvent pas être supprimées ou transférées directement.
Jusqu’à présent, aucun transpileur n’a été en mesure d’accepter du Code avec des attributs PHP 8.0 et de générer automatiquement son équivalent PHP 7.4. Par conséquent, si votre code PHP a besoin de propriétés, sa conversion sera difficile ou impossible. Ce sont des fonctionnalités que PHP 7.1 et plus peuvent actuellement transférer. Si votre code n’utilise que ces fonctions, vous pouvez vous assurer que l’application transférée fonctionne correctement. Sinon, vous devrez évaluer si le Code transféré peut causer des erreurs.
Fonctionnalité de version PHP
7,1
N’importe quoi.
7,2
– Type d’objet – extension du type de paramètre – PREG _ unmatched as NULL flag in PREG match
7,3
– Assignation de référence dans la liste () \/ déconstruction de tableau (sauf foreach – # 4376) – syntaxe herdeoc et nowdoc flexible – virgule de fin dans l’appel de fonction – le cookie set (RAW) accepte l’option $argument
7,4
– Attributs dactylographiés – fonctions fléchées – opérateur d’assignation de fusion zéro – disimbalag
Odotta en PHP 8.0. La même fonctionnalité pour PHP 7.4 et plus tôt peut être facilement implémentée en utilisant si (! Defined (‘PHP _ version id’) | | (defined (‘PHP version id’) & & PHP version id ‘)
Fonctionnalité de version PHP
7,2
Fonctions: SPL _ Object ID utf8 encode utf8 Decode constante: PHP float u * PHP os Family
< 80000)) { if (!function_exists('str_contains')) { /** * Checks if a string contains another * * @param string $haystack The string to search in * @param string $needle The string to search * @return boolean Returns TRUE if the needle was found in haystack, FALSE otherwise. */ function str_contains(string $haystack, string $needle): bool { return strpos($haystack, $needle) !== false; } } } Poiché il backporting è più semplice del transpiling, dovremmo optare per questa soluzione ogni volta che il backporting fa il suo lavoro. Per quanto riguarda l'intervallo tra PHP 8.0 e 7.1, possiamo utilizzare le librerie polyfill di Symfony: Polyfill PHP 7.1 Polyfill PHP 7.2 Polyfill PHP 7.3 Polyfill PHP 7.4 Polyfill PHP 8.0 Queste librerie eseguono il backport delle seguenti funzioni, classi, costanti e interfacce:
7,3
Fonctions: Array _ Key First Array Key last hrtime is countable exception: jsonexception
7,4
Fonctions: get _ mangled Object Vars MB Str Split password algos
18.
Interface: String Class: valueerror unhandledmatcherror constant: Filter _ validate bool Function: fdiv get debug type PREG last Error MSG Str contains Str start with Str Ends with get Resource Id
Exemples de PHP transparent regardons quelques exemples de code PHP transparent et quelques paquets entièrement transparents. Les expressions correspondantes sont introduites dans le Code PHP PHP 8.0. Ce code source: fonction getfieldvalue (String $fieldname):? Chaîne {return match ($fieldname) {‘Foo’ = > ‘foofoo’, ‘bar’ = > ‘bar’, ‘Baz’ = > ‘bazbaz’, default = > NULL,};}… Convertir l’utilisation de l’opérateur Switch en version équivalente de PHP 7.4: fonction getfieldvalue (String $fieldname):? Chaîne {switch ($fieldname) {case \
La haine est plus facile à lire. Voyons les défauts. Le récepteur transcrit automatiquement le Code, mais le processus peut nécessiter une entrée manuelle pour fonctionner avec notre configuration spécifique. Les bibliothèques tierces ont également besoin d’être transférées. Chaque fois que leur transcription produit une erreur, cela devient un problème, parce que nous devons creuser profondément dans leur code source pour trouver la cause possible. Si le problème peut être résolu et que le projet est open source, nous devrons envoyer une requête pull. Si la Bibliothèque n’est pas open source, nous pourrions rencontrer des obstacles. Si le code source contient des propriétés PHP 8.0 ou toute autre fonctionnalité qui ne peut pas être transférée, nous ne pouvons pas continuer. Cependant, le Rector ne valide pas cette condition, donc nous devons la vérifier manuellement. Ce n’est peut – être pas un gros problème avec notre code source, mais il peut devenir un obstacle à la dépendance des tiers. L’information de débogage utilise le Code transféré au lieu du code source. Lorsque l’application génère un message d’erreur par analyse de pile en production, le numéro de ligne pointe vers le Code transcrit. Nous devons convertir le Code transparent en code original pour trouver le numéro de ligne approprié dans le code source. Les projets que nous transférons et d’autres bibliothèques installées dans un environnement de production peuvent utiliser les mêmes dépendances de tiers. Cette dépendance de tiers sera transférée à notre projet et conservera son code source original pour d’autres bibliothèques. Par conséquent, les versions transférées doivent être précédées de PHP scoper, Strauss ou d’autres outils pour éviter
ù les dossiers qui contiennent toutes les d épendances de production: $PATH = \
Ensuite, nous pouvons créer un autre profil de répertoire, comme une règle de lien de répertoire. Php exécutera la règle manquante. Cette fois, nous n’avons pas à traiter un ensemble complet de règles pour tous les fichiers dans src \/, mais nous pouvons exécuter des règles manquantes spécifiques sur le fichier spécifique auquel la règle devrait s’appliquer: \/ \/ directory Chain Rules. Php utilise le récepteur \ \ Core \ \ Configuration \ \ option; Utiliser le collecteur \ \ programphp74 \ \ collecteur \ \ classmethod \ \ gradeselftypedeclarationdirector; Utiliser Symfony \ \ Component \ \ dependencyinjection \ \ Loader \ \ configurator \ \ containerconfigurator; Return Static Function (containerconfigurator $containerconfigurator): void {$services {$services = $containerconfigurator – > > Services (); $$services – > SET (demodemote selecttypypedeclarationdirector:: Class); $$Parameters = $containerconfigurator – – > Parameters (); $$Parameters – > (containerconfigurator $containerconfigurator): void {$services = $containerconfigurator – > > Services ();; $$services – > SET (demodemodemodemodemoftypetypedeclarationdirector:: Class); $$Parameters = $contacontainerconfigurconfigurator – – > > Parameters ();; $$Parameters – > SET (option:: PATH, CHE \/ cacheitem.php ‘,]; Enfin, à l’étape 2, nous disons au récepteur d’utiliser le nouveau fichier de configuration – – config: # First through all changes $vendor \/ bin \/ Rector Process SRC # second through Repair a specific problem $vendor \/ bin \/ Rector Process – – config = Rector Chain Rule. Les dépendances du compositeur PHP peuvent être incohérentes la bibliothèque peut déclarer les dépendances à programmer pour le développement (c. – à – D. Sous require Dev dans composer.json), mais le Code est toujours référencé pour la production (par exemple sur certains fichiers sous src \/, pas sous tests \/). En général, ce n’est pas un problème parce que le Code peut ne pas être chargé dans la production, de sorte qu’il n’y a jamais d’erreur dans l’application. Cependant, lorsque le recteur traite le code source et ses dépendances, il vérifie que tout le Code de référence peut être chargé. Si le fichier fait référence à un morceau de code dans une bibliothèque non scellée (parce qu’il est déclaré pour le développement seulement), le récepteur génère une erreur. Par exemple, la classe earlyexpirationhandler d’un composant de cache Sy
Mfony implémente l’interface messagehandlerinterface à partir du composant Messenger: la classe earlyexpirationhandler implémente messagehandlerinterface {\/…} Cependant, Symfony \/ cache indique que Symfony \/ Messenger est une dépendance de développement. Par conséquent, lorsque vous lancez le récepteur sur un projet qui dépend de Symfony \/ cache, il génère une erreur: [erreur] impossible de traiter le fichier \
Est le flux de travail de l’opération github qui crée la publication du plugin wordpress: name: Build installable plugins and Upload as a Publishing Asset to: Release: types: [Publishing] Job: Build: name: Build, Télécharger et télécharger la version en cours d’exécution à: Ubuntu dernière étape: – Nom: Checkout Code Use: action \/ [email protection] – Nom: demote production Code (to PHP 7.1) Running: | composer install vendor \/ bin \/ Recover Process sed – I’S \/ requires PHP: 7.4 \/ requires PHP: 7.1 \/ ‘graphql API. Php – name: Build Project for production Running: | composer install – no Development – Optimize autoloader MkDir Build – name: create artefacts Using: montudor \/ [email protection]: args: zip – X – R Build \/ graphql API. Fermeture éclair X *. GIT * Node _ module Code de conduite « * \/ \. * ». Contribution de ed. MD issue _ template. MD pull _ request template. Directeur Md. Php *. Dist compositeur Dev Helpers * * Build * * – name: upload artifact Use: actions \/ [email protection]: name: graphql API Path: Build \/ graphql API. Zip name: upload to release utilise: jasoneco \/ [protégé par courriel] et: args: Build \/ graphqlapi. Application Zip \/ environnement ZIP: github _ token: ${{secrets.github token}} ce flux de travail contient une procédure standard pour la publication du plug – in WordPress via l’opération github. Le Code plug – in nouvellement ajouté est converti de PHP 7.4 à 7.1 à l’étape suivante: – Nom: Code de production dégradé (à PHP 7.1) Exécution: | fournisseur \/ bin \/ Rector Process sed – I’S \/ Requirements PHP: 7.4 \/ Requirements PHP: 7.1 \/ ‘graphql API. Php en général, ce flux de travail effectue maintenant les étapes suivantes: vérifier le code source du plug – in WordPress à partir de son dépôt, Installer son compositeur de dépendances écrit en PHP 7.4 modifie son Code de PHP 7.4 à 7.1 modifie l’entrée \
De plus, en tant qu’artefact pour tester le Code transparent dans une opération github, une fois le Code transféré à PHP 7.1, comment pouvons – nous savoir qu’il fonctionne bien? Ou, en d’autres termes, comment savons – nous qu’il a été entièrement converti et qu’il n’a pas laissé de vestiges d’une version plus récente du Code php? Comme pour la conversion de code, nous pouvons implémenter la solution dans le processus ci. L’idée est de configurer l’environnement Runner en PHP 7.1 et d’exécuter lInter sur un code transparent. Si un fragment de code n’est pas compatible avec php 7.1 (par exemple, une propriété non convertie que PHP 7.4 a saisie), lInter génère une erreur. Le bon fonctionnement de PHP lInter est PHP Parallel Lint. Nous pouvons installer cette bibliothèque en tant que dépendance de développement dans un projet, ou nous pouvons demander au processus ci de l’installer en tant que projet compositeur autonome: composer crée un projet PHP Parallel Lint \/ php Parallel Lint, tant que le Code contient PHP 7.2 et plus, Php Parallel Lint génère l’erreur suivante: lancez PHP Parallel Lint \/ Parallel Lint Layers \/ vendor \/ – – exclude vendor \/ Symfony \/ polyfill ctype \/ bootstrap80. Php – exclut le fournisseur \/ Symfony \/ polyfill Intl grapheme \/ bootstrap80. Php – exclut le fournisseur \/ Symfony \/ polyfill Intl IDN \/ bootstrap80. Php – exclude vendor \/ Symfony \/ polyfill Intl normalizer \/ bootstrap80. Php – exclut le fournisseur \/ Symfony \/ polyfill mbstring \/ bootstrap80. Php PHP 7.1.33 | 10 emplois parallèles……………………………………………………………………………………………… 60 \/ 2870 (2%) 120 \/ 2870 (4%) 660 \/ 2870 (22%) X, 720 \/ 2870 (25%) 780 \/ 2870 (27%) 2820 \/ 2870 (98%)
2870 \/ 2870 (100%) PHP: 55 53 | ‘0.8.0’, 54 | \ (API graphql de WordPress, ‘API graphql’, > 55 |) {56 | $plugin – > Setup (); 57 |} unpected ‘)’ in Layers \/ graphqlapiforwp \/ plugins \/ graphql API for WP \/ graphql API. Erreur: le processus est terminé avec le Code de sortie 1. Nous ajoutons le lien au flux de travail de l’IC. Les étapes pour convertir le Code de PHP 8.0 en 7.1 et le tester sont: vérifier le code source, s’assurer que l’environnement exécute PHP 8.0, Pour permettre à rector de convertir le code source en PHP 7.1, installez l’outil PHP lInter pour changer la version PHP de l’environnement en 7.1 exécuter lInter sur le Code transcrit ce flux de travail d’action github exécute les tâches suivantes: nom: rétrograder la tâche de test PHP: Main: name: rétrograder le Code en PHP 7.1 via Rector, Exécuter le test à l’endroit suivant: Ubuntu dernière étape: – Nom: Checkout Code Use: action \/ [E – mail protection] – Nom: set PHP Use: shivamathur \/ [E – mail protection]: version PHP: 8.0 couverture: none – Nom: Local Package – run downgraded PHP Code through Directory: | composer install vendor \/ bin \/ directory Process # prepare to test on PHP 7.1 – Nom: install PHP Parallel Lint Run: composer create Project Php Parallel Lint \/ php Parallel Lint – – ANSI – name: Switch to PHP 7.1 Using: shivamtamatur \/ [email protection]: PHP version: 7.1 Cover cover: none # Lint Code transmitted – name: Running PHP Parallel Lint on PHP 7.1 Running: PHP Parallel Lint \/ Parallel Lint src \/ vendor \/ – – excluding Vendor \/ Symphony \/ polyfill ctype \/ bootstrap80. Php – exclut le fournisseur \/ Symfony \/ polyfill Intl grapheme \/ bootstrap80. Php – exclut le fournisseur \/ Symfony \/ polyfill Intl IDN \/ bootstrap80. Php – exclude vendor \/ Symfony \/ polyfill Intl normalizer \/ bootstrap80. Php – exclut le fournisseur \/ Symfony \/ polyfill mbstring \/ bootstrap80. Php annotatec
Différents fichiers bootstrap80. PHP de la Bibliothèque Symfony polyfill (pas de migration nécessaire) doit être exclu de lInter. Ces fichiers contiennent PHP 8.0, de sorte que lInter génère des erreurs pendant le traitement. Cependant, il est sûr d’exclure ces fichiers parce qu’ils ne sont chargés dans l’environnement de production que si vous exécutez PHP 8.0 ou plus tard: if (\ PHP _ version ID > = 80000) {return require dir 80.php ‘;} Que vous créiez un plug – in public pour WordPress ou que vous mettiez à jour l’ancien Code, il y a de nombreuses raisons pour lesquelles vous ne pouvez pas utiliser la dernière version de PHP pour comprendre comment transpiring peut vous aider à cliquer sur Twitter Summary dans ce guide cet article nous enseigne comment transférer le Code PHP, Permet d’utiliser PHP 8.0 dans le code source et de créer une version pour PHP 7.1. Le transfert se fait à l’aide d’un outil de reconstruction PHP, Rector. Transformer le Code nous permet d’être de meilleurs développeurs parce que nous pouvons mieux détecter les bogues pendant le développement et générer du Code naturellement plus facile à lire et à comprendre. Transpoling nous permet également de découpler le Code des exigences PHP spécifiques du CMS. Maintenant, si nous voulons utiliser la dernière version de PHP pour créer un plug – in WordPress ou un module Drupal accessible au public, sans restreindre sérieusement notre base d’utilisateurs, alors nous pouvons le faire. Avez – vous des questions sur la transparence php? Veuillez nous en informer dans la section commentaires!