Re: Composer et SPIP sont dans un bateau
Matthieu Marcillaud <[email protected]>
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <[email protected]> |
Le 18/03/2019 à 18:23, Maïeul Rouquette a écri
> ca pose des soucis politiques / editorial, de devoir avoir composer sur
> n'importe quel serveur qui hébergement
Je te retourne ton «c’est à dire ?».
Composer n’a pas besoin de permissions d’administrateur du serveur pour
fonctionner (c’est un fichier php… enfin une archive .phar) ; si c’est
la question ?
>> Mais c’est aussi parce que Composer fait un poil plus que ce qu’on a
>> dit
>> (résolution de dépendances & téléchargements).
>> Notamment il calcule aussi un «autoloader», basé sur les différentes
>> déclarations des fichiers composer.json. Et assez certainement, on en
>> aura besoin dans l’avenir dans les plugins.
>>
> c'est à dire?
Ok, détaillons (rapidement).
Un autoloader en PHP, c’est une déclaration qui permet de dire :
- si j’appelle telle classe `new Toto()` ou `new Auto\Mobile()`,
- que je la connais pas encore en mémoire,
- alors, elle se trouve dans tel fichier ; vas-y : charge ce fichier
automatiquement !
En gros ça pourrait remplacer potentiellement certains include() ou
include_spip().
Un intérêt, c’est que tu vas déclarer en tête de fichiers toutes les
classes que tu pourrais utiliser dans ton fichier (ce n’est pas une
obligation non plus) avec l’instruction `use` :
Ici, tu pourrais avoir `use Auto\Mobile;` ou `use Auto\Mobile as
Automobile;`, et plus loin quelque part dans ton code `$auto = new
Mobile();` ou `$auto = new Automobile();` (ou toute autre instruction
indiquant une classe quelque part)
Le fichier contenant la description de la classe Auto\Mobile ne serait
chargé (si besoin) que si la ligne new Mobile() est réellement exécutée.
Autrement dit, les `use` ne sont pas comme des include ou des require.
Ça dit juste, j’aurais probablement besoin de ça — fais-moi en un
raccourci ; grosso modo.
Et pour savoir la correspondance entre le nom de la classe, et le
fichier à rechercher, il n’y a pas de mystère : cela s’appuie sur,
maintenant essentiellement PSR-4 (https://www.php-fig.org/psr/psr-4/),
et une déclaration dans les fichiers composer.json.
Ainsi tu pourrais avoir `autoload: { "psr-4": { "Auto\\": "src/" } }`
dans le composer.json du plugin… disons "Auto"… :
Ça dit en gros, cherche ce qui concerne le namespace "Auto/" dans le
répertoire src/ ici présent…. Ça sous-entendrait qu’il existe le fichier
"src/Mobile.php" avec la classe Auto/Mobile dedans.
Note que toutes les librairies PHP utilisent ça maintenant et déjà
depuis quelques temps quand même.
Il me semble (mais là encore ce n’est qu’un avis perso) que nous aurions
intérêt à nous harmoniser avec les autres un peu :)
MM.
_______________________________________________
liste: https://listes.rezo.net/mailman/listinfo/spip-dev
doc: http://www.spip.net/
dev: http://trac.rezo.net/trac/spip/
irc://irc.freenode.net/spip