# 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