Maison  >  Article  >  développement back-end  >  Framework API PHP manuscrit (1) Spécification PSR

Framework API PHP manuscrit (1) Spécification PSR

藏色散人
藏色散人avant
2023-02-10 10:31:113464parcourir

Cet article vous apporte des connaissances pertinentes sur PHP. Il parle principalement avec vous des normes de codage. Il est également recommandé d'essayer de suivre les normes pendant le développement. Les amis intéressés peuvent jeter un œil ci-dessous. vous. aider.

Intention originale de création

  • Fatigué d'utiliser CURD ?
  • Les différents cadres sont-ils un peu écrasants ?
  • Avez-vous déjà essayé de concevoir un framework vous-même ?
  • J'ai appris la syntaxe PHP, mais je n'ai pas de projet pour la pratiquer et poser des bases solides

J'espère que cela pourra vous aider à construire rapidement votre propre framework et apporter de l'aide et de l'inspiration à votre travail ou vos études.

Que pouvez-vous apprendre

  • Spécification PSR

  • Utilisation de composer

  • Créer rapidement un framework d'interface API

  • Applications Redis de différents types de données

  • Analyse d'application de cache


Avant de développer le framework, permettez-moi de vous présenter les spécifications suivies par le développement du framework.

La plupart des langages de programmation ont leur propre ensemble de normes de codage. En tant que « meilleur langage au monde », PHP a certainement ses propres normes de codage. Cette spécification est une recommandation standard PHP (PSR en abrégé).

Bien sûr, d'après mon propre travail, j'ai découvert que de nombreux programmeurs PHP, en particulier les programmeurs juniors, ne savent pas que PHP a une telle spécification. Je pense que ce n'est pas scientifique.

Qu'est-ce que le PSR ?

Avant d'introduire PSR, je dois présenter l'organisation qui a formulé cette spécification -----PHP-FIG, le nom complet est PHP Framework Interoperability.

Les membres de l'organisation formulent des spécifications et les mettent en œuvre dans leurs propres projets. Bien qu'il ne s'agisse pas d'une organisation officielle, elle représente également la plupart des projets de la communauté PHP, tels que CakePHP, Composer, Drupal, PEAR, Slim, Yii framework, Zend Framework, etc. Et de plus en plus de projets rejoignent et suivent cette norme.

Le but du projet PSR est de développer une norme de collaboration avec le niveau de restrictions le plus bas grâce à des discussions entre les auteurs du framework ou les représentants du framework. Chaque framework suit des normes de codage unifiées pour permettre aux ingénieurs de mieux travailler ensemble.

Jusqu'à présent, 20 éléments ont été répertoriés sur le site officiel. En excluant ceux en rédaction et rejetés, il y a les 13 éléments suivants.

Framework API PHP manuscrit (1) Spécification PSR


Autant jeter un œil à ces spécifications :

Spécifications de codage de base PSR-1

  • Les fichiers de code PHP doivent commencer par
  • Code PHP les fichiers doivent commencer par un encodage UTF-8 sans BOM
  • Le code PHP ne doit définir que des déclarations telles que des classes, des fonctions, des constantes ou d'autres opérations qui produiront des effets secondaires (tels que la génération d'une sortie de fichier et la modification des fichiers de configuration .ini, etc.) , qui ne peuvent tous deux en choisir qu'un seul
  • L'espace de noms et la classe doivent être conformes à la spécification de chargement automatique PSR-4 de PSR
  • Le nom de la classe doit suivre la convention de dénomination CamelCase commençant par une majuscule dans le style StudyCaps
  • Toutes les lettres du les constantes de la classe doivent être en majuscules, avec des traits de soulignement entre les mots Délimitées
  • Les noms de méthodes doivent être conformes à la convention de dénomination des casses camel minuscules de style camelCase

Spécification du style de code PSR-12

Les spécifications PSR-12 sont très détaillées, notamment les déclarations, les espaces de noms, les classes et l'héritage, ainsi que les structures de contrôle, etc. illustrent.

Jetons d'abord un coup d'œil à une démo :

<?php

declare(strict_types=1);

namespace Vendor\Package;

use Vendor\Package\{ClassA as A, ClassB, ClassC as C};
use Vendor\Package\SomeNamespace\ClassD as D;

use function Vendor\Package\{functionA, functionB, functionC};

use const Vendor\Package\{ConstantA, ConstantB, ConstantC};

class Foo extends Bar implements FooInterface
{
    public function sampleFunction(int $a, int $b = null): array
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}
  • Le code doit suivre les spécifications de codage dans [PSR-1]
  • Tous les fichiers PHP doivent utiliser Unix LF (saut de ligne) comme terminateur de ligne ;
  • Tous les fichiers PHP ; doit commencer par une ligne vide comme fin ;
  • Les fichiers de code PHP pur doivent omettre la dernière balise de fermeture ?>Le nombre de caractères par ligne doit être doucement maintenu à moins de 80. En théorie, il ne doit pas dépasser 120. , mais cela ne doit pas être le cas. Il existe des restrictions strictes ; il ne doit pas y avoir d'espaces supplémentaires après les lignes non vides.
  • Les lignes vides peuvent faciliter la lecture du code et aider à le bloquer.
  • Il ne doit pas y avoir plus d'une instruction par ligne
  • Le code doit être indenté de 4 espaces et la touche de tabulation ne doit pas être utilisée
  • Tous les mots-clés PHP doivent être tous en minuscules
  • Les spécifications de base de la structure de contrôle sont comme suit :
  • 控制结构关键词后必须有一个空格。
    左括号 ( 后一定不能有空格。
    右括号 ) 前也一定不能有空格。
    右括号 ) 与开始花括号 { 间一定有一个空格。
    结构体主体一定要有一次缩进。
    结束花括号 } 一定在结构体主体后单独成行。复制代码
  • Il existe de nombreuses spécifications de style de code, je ne les expliquerai donc pas une par une ici. Vous pouvez les lire vous-même

Chargement automatique PSR-4

À propos des spécifications pertinentes pour le chargement automatique. la classe correspondante à partir du chemin du fichier, cette spécification est interopérable et peut être utilisée en complément de toute spécification de chargement automatique, y compris PSR-0. De plus, ce PSR inclut également la spécification du chemin de stockage du fichier correspondant à la classe automatiquement chargée.

    La « classe » ici fait généralement référence à toutes les classes, interfaces, traits, blocs de code réutilisables et autres structures similaires.
  • Un nom de classe complet doit avoir la structure suivante :
  •  \(\)*\

      Le nom de classe complet
    • doit

      avoir un espace de noms de niveau supérieur, appelé "espace de noms du fournisseur"

    • Le nom de classe complet
    • Peut ;

      avoir un ou plusieurs sous-espaces de noms ;

    • Le nom complet de la classe
    • doit

      avoir un nom de classe final

    • Les traits de soulignement dans n'importe quelle partie du nom complet de la classe n'ont aucune signification particulière ;
  • Le nom complet de la classe peut être composé de lettres majuscules et minuscules

  • Tous les noms de classe doivent être sensibles à la casse.

  • Lors du chargement du fichier correspondant en fonction du nom complet de la classe...

    • Dans le nom complet de la classe, supprimez le premier séparateur d'espace de noms, un ou plusieurs espaces de noms et sous-espaces de noms consécutifs devant, comme un "préfixe d'espace de noms", il doit correspondre à au moins un "répertoire de base de fichiers"

    • Le sous-espace de noms qui suit immédiatement le préfixe d'espace de noms doit correspondre au "répertoire de base de fichiers" correspondant, où le séparateur d'espace de noms sera utilisé comme séparateur de répertoire. Le nom de la classe

      à la fin de
    • doit avoir le même nom que le fichier correspondant avec .php comme suffixe.

    • L'implémentation de l'autoloader ne doit pas lever d'exception, ne doit pas déclencher un quelconque niveau de message d'erreur, et ne doit pas avoir une valeur de retour.

  • Exemple

    Le tableau suivant montre les chemins de fichiers correspondant au nom de classe complet, au préfixe d'espace de noms et au répertoire de base de fichiers conformes à la spécification.

    Nom complet de la classe Préfixe de l'espace de noms Répertoire de base du fichier Chemin du fichier
    AcmeLogWriter File_Writer AcmeLogWriter ./acme-log- écrivain/lib / ./acme- log-writer/lib/File_Writer.php
    AuraWebResponseStatus AuraWeb /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
    SymfonyCoreRequest SymfonyCore ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
    ZendAcl Zend /usr /inclues/Zend/ / usr /includes/Zend/Acl.php

    Pour l'instant, nous présenterons uniquement ces trois spécifications couramment utilisées.

    Cliquez pour afficher les dernières suggestions de spécifications


    Cette section présente principalement la spécification de codage PHP PSR. Il est recommandé à tout le monde d'essayer de suivre cette spécification pendant le développement, en particulier lors du développement en équipe, nous ne devrions pas chacun avoir notre. propre codage Le style doit être aussi unifié que possible. Comme l'indiquait l'intention initiale de l'organisation PHP-FIG, les spécifications qu'elle a établies ne visent pas à restreindre la liberté de codage de chacun, mais à trouver des points communs afin que nous puissions mieux travailler ensemble.

    Apprentissage recommandé : "Tutoriel vidéo PHP"

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer