Aller au contenu
getnextpdf.com

Enterprise édition

PHPStan — Référence approfondie

  • Une seule classe publique : EditionBoundaryRule, une règle PHPStan personnalisée portant sur les instructions use.
  • Impose l’ordre de dépendance unidirectionnel entre éditions. Core n’importe jamais Pro ni Enterprise. Pro n’importe jamais Enterprise.
  • Les violations signalent l’identifiant nextpdf.editionBoundaryViolation sur la ligne use fautive.
  • Uniquement au moment du build. La règle n’a aucun chemin d’exécution et aucun effet sur les PDF générés.
  • Livrée dans nextpdf/enterprise. L’enregistrement s’appuie sur la configuration PHPStan standard.

Cette fonctionnalité est livrée dans NextPDF Enterprise (nextpdf/enterprise) et s’active avec une enveloppe de licence de niveau Enterprise. C’est une règle d’analyse statique au moment du build, sans chemin d’exécution : la frontière du paquet nextpdf/enterprise la contrôle, et elle ne porte aucun code de capacité distinct par fonctionnalité. Core et Pro n’en livrent pas d’équivalent. Comparer les éditions et obtenir une licence.

Installe le paquet, puis enregistre la règle dans la configuration PHPStan.

Fenêtre de terminal
composer require nextpdf/enterprise:^3
rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule
SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
EditionBoundaryRuleAucun (pas d’arguments de constructeur)Règle PHPStan sans état, abonnée aux instructions useNe lève jamaisfinal ; implémente PHPStan\Rules\Rule sur Use_
EditionBoundaryRule::getNodeType()AucunDéclare le type de nœud AST auquel la règle s’abonnestring (Use_::class)Ne lève jamaisMéthode standard du contrat Rule de PHPStan
EditionBoundaryRule::processNode()Node $node, Scope $scopeVérifie chaque symbole importé au regard des préfixes interdits pour l’espace de noms analysélist<IdentifierRuleError> (vide si conforme)Ne lève jamais ; les violations remontent comme erreurs de règleIdentifiant d’erreur nextpdf.editionBoundaryViolation
final class EditionBoundaryRule implements Rule
{
public function getNodeType(): string;
public function processNode(Node $node, Scope $scope): array;
}

EditionBoundaryRule implémente le contrat Rule standard de PHPStan sur le type de nœud Use_. Pour chaque instruction use, elle compare l’espace de noms du fichier analysé au préfixe d’espace de noms de chaque symbole importé et impose un ordre de dépendance unidirectionnel.

Espace de noms analyséLibellé d’éditionPréfixes d’import interdits
Sous-espaces de noms NextPDF\*, hors Pro et EnterpriseCoreNextPDF\Pro\, NextPDF\Enterprise\
NextPDF\Pro et NextPDF\Pro\*ProNextPDF\Enterprise\
NextPDF\Enterprise et NextPDF\Enterprise\*EnterpriseAucun (palier supérieur)
Tout espace de noms hors NextPDF\Aucun (non contraint)

Lorsqu’un import franchit la frontière, la règle signale une erreur sous l’identifiant nextpdf.editionBoundaryViolation, ancrée à la ligne de l’instruction use fautive. Le message nomme le symbole importé, l’espace de noms importateur, le préfixe interdit et des libellés d’édition lisibles. Chaque symbole importé produit au plus une erreur : la correspondance de préfixe s’arrête au premier préfixe interdit qui correspond.

La vérification est statique et indicative. Elle signale les violations de frontière sur les instructions d’import. Elle ne prouve pas que le programme analysé est par ailleurs correct.

  • Les espaces de noms hors NextPDF\ et les fichiers sans espace de noms ne produisent aucune erreur ; la règle retourne une liste vide.
  • Le code déclaré dans l’espace de noms racine exact NextPDF (sans segment de sous-espace de noms) n’est pas contraint ; la détection de frontière correspond aux sous-espaces de noms NextPDF\.
  • Les fichiers Enterprise ne sont jamais signalés pour l’import de symboles Pro ou Core (palier supérieur, par conception).
  • La correspondance de préfixe respecte le séparateur. Un espace de noms tel que NextPDF\Professional se classe comme Core, pas Pro, et les imports qui en dépendent ne génèrent jamais de faux positif au regard du préfixe NextPDF\Pro\.
  • Importer les noms littéraux NextPDF\Pro ou NextPDF\Enterprise sans segment supplémentaire n’est pas signalé ; seuls les symboles situés sous ces préfixes correspondent.
  • La règle ne filtre pas par type d’import : les imports de classe, de function et de const sous un préfixe interdit sont tous signalés.
  • Les références pleinement qualifiées écrites en ligne sans instruction use sont hors périmètre. Privilégie les imports pour que la frontière soit appliquée.
  • Les déclarations use groupées sont analysées comme le type de nœud distinct GroupUse et échappent à l’abonnement Use_ de la règle ; les imports simples par symbole conservent la vérification de frontière.
  • processNode() ne lève jamais ; toutes les issues remontent comme erreurs de règle PHPStan ou comme résultat vide.
  • Ce n’est pas un composant d’exécution. Il n’effectue aucune opération cryptographique, et le mode FIPS ne s’applique pas.

Aucune conformité à une norme n’est revendiquée. Il s’agit d’une règle d’outillage pour développeurs qui impose une contrainte architecturale interne (l’empilement des éditions) dans les builds en aval. Elle implémente le contrat d’extension de règle PHPStan, qui est une API d’outil tiers, non une norme formelle. La règle ne donne aucune garantie de conformité, de certification ni de correction sur le code analysé ; elle signale uniquement les violations d’import de frontière entre éditions et reste indicative.

  • La règle s’exécute au sein de PHPStan pendant l’analyse, lit uniquement la structure du code source et n’a aucun effet sur les PDF générés ni sur un quelconque service déployé.
  • L’enregistrement de la règle et le choix du niveau PHPStan restent à la charge de l’intégrateur.
  • La classe est final et sans état, elle est donc sûre avec les workers d’analyse parallèle de PHPStan.
  • La sortie d’analyse est déterministe pour une arborescence source donnée : les mêmes entrées produisent la même liste d’erreurs.
  • Disponible depuis nextpdf/enterprise 2.1.0 ; le contrat ci-dessus reflète la 3.1.0.

Cette page documente uniquement le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins d’espaces de noms internes, les classes utilitaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de ticket sont hors périmètre.