76 lines
3.1 KiB
Markdown
76 lines
3.1 KiB
Markdown
# nulib\php\content
|
|
|
|
un contenu est une liste de valeurs, avec une syntaxe pour que certains éléments
|
|
soient dynamiquement calculés.
|
|
|
|
le contenu final est résolu selon les règles suivantes:
|
|
- Si le contenu n'est pas un tableau:
|
|
- une chaine est quotée avec `htmlspecialchars()`
|
|
- un scalaire ou une instance d'objet sont pris tels quels
|
|
- Sinon, le contenu doit être un tableau, séquentiel ou associatif, ça n'a pas
|
|
d'incidence
|
|
- les éléments scalaires ou instance d'objets sont pris tels quels
|
|
- les Closure sont appelés dès la résolution, et leur valeur de retour est
|
|
considéré comme un contenu statique inséré tel quel dans le flux i.e dans
|
|
l'exemple suivant $c1 et $c2 sont équivalents:
|
|
~~~php
|
|
$closure = function() { ... }
|
|
$c1 = [...$before, $closure, ...$after];
|
|
$c2 = [...$before, ...c::q($closure()), ...$after];
|
|
# la différence est que $c2 n'est évalué que lors de la résolution du
|
|
# contenu
|
|
~~~
|
|
- les tableaux représentent un traitement dynamique: appel de fonction,
|
|
instanciation, etc. le contenu effectif n'est évalué que lors de l'affichage
|
|
|
|
Les syntaxes possibles sont:
|
|
|
|
`[[], $args...]`
|
|
: contenu statique: les valeurs $args... sont insérées dans le flux du contenu
|
|
sans modification. c'est la seule façon d'insérer un tableau dans la liste des
|
|
valeurs
|
|
|
|
`["class_or_function", $args...]`
|
|
`[["class_or_function"], $args...]`
|
|
`[["function", $args0...], $args1...]`
|
|
`[["class", null, $args0...], $args1...]`
|
|
: instantiation ou appel de fonction
|
|
|
|
`["->method", $args...]`
|
|
`[["->method"], $args...]`
|
|
`[[null, "method"], $args...]`
|
|
`[[null, "method", $args0...], $args1...]`
|
|
: appel de méthode sur l'objet contexte spécifié lors de la résolution du contenu
|
|
|
|
`[[$object, "method"], $args...]`
|
|
`[[$object, "method", $args0...], $args1...]`
|
|
: appel de méthode sur l'objet spécifié
|
|
|
|
`[["class", "method"], $args...]`
|
|
`[["class", "method", $args0...], $args1...]`
|
|
: appel de méthode statique de la classe spécifiée
|
|
|
|
Le fait de transformer un contenu en une liste de valeurs statiques s'appelle
|
|
la résolution. la résolution se fait par rapport à un objet contexte, qui est
|
|
utilisé lors des appels de méthodes.
|
|
|
|
Lors des appels de fonctions ou des instanciations, les $arguments sont tous des
|
|
contenus:
|
|
- une valeur scalaire ou une instance est passée inchangée
|
|
- un tableau est traité comme un contenu avec les règles ci-dessus
|
|
|
|
## Affichage d'un contenu
|
|
|
|
Deux interfaces sont utilisées pour modéliser un élément de contenu à afficher:
|
|
- IContent: objet capable de produire du contenu
|
|
- IPrintable: objet capable d'afficher un contenu
|
|
|
|
Tous les autres éléments de contenus sont transformés en string avant affichage.
|
|
Un système de formatters permet de définir des fonctions ou méthodes à utiliser
|
|
pour formatter des objets de certains types.
|
|
|
|
Lors de l'affichage du contenu, deux éléments contigûs $a et $b sont affichés
|
|
séparés par un espace si $a se termine par un mot (éventuellement terminé par
|
|
un point '.') et $b commence par un mot.
|
|
|
|
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary |