modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-07-08 20:24:57 +04:00
parent fe4d0d8acb
commit 23b8dd7d19
3 changed files with 37 additions and 14 deletions

View File

@ -1,9 +0,0 @@
<?php
namespace nur\sery\php\content;
/**
* Interface IStaticContent: comme {@link IContent} mais la liste retournée est
* une liste de contenu statique à analyser récursivement
*/
interface IStaticContent extends IContent {
}

View File

@ -0,0 +1,31 @@
<?php
namespace nur\sery\php\content;
use nur\sery\php\func;
/**
* Class Printer: wrapper autour d'une instance de {@link IContent} qui affiche
* le contenu au lieu de le retourner
*
* cette classe est conçue pour wrapper des objets complexes dont le contenu est
* contruit au fur et à mesure: ainsi, les objets peuvent être utilisés tels
* quels dans un contenu, ou alors être wrappés si on veut simplement les
* afficher
*/
class Printer implements IPrintable {
function __construct(IContent $content) {
$this->content = $content;
}
protected IContent $content;
function print(): void {
$content = $this->content->getContent();
c::write($content);
}
function __call($name, $args) {
$content = func::call([$this->content, $name], ...$args);
c::write($content);
}
}

View File

@ -11,14 +11,14 @@ le contenu final est résolu selon les règles suivantes:
d'incidence d'incidence
- les éléments scalaires ou instance d'objets sont pris tels quels - 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 - 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 considéré comme un contenu *statique* inséré tel quel dans le flux i.e dans
l'exemple suivant $c1 et $c2 sont équivalents: l'exemple suivant $c1 et $c2 sont globalement équivalents:
~~~php ~~~php
$closure = function() { ... } $closure = function() { ... }
$c1 = [...$before, $closure, ...$after]; $c1 = [...$before, $closure, ...$after];
$c2 = [...$before, ...c::q($closure()), ...$after]; $c2 = [...$before, ...c::q($closure()), ...$after];
# la différence est que $c2 n'est évalué que lors de la résolution du # $c1 == $c2, sauf si $closure() retourne des valeurs qui peuvent être
# contenu # considérées comme du contenu dynamique
~~~ ~~~
- les tableaux représentent un traitement dynamique: appel de fonction, - les tableaux représentent un traitement dynamique: appel de fonction,
instanciation, etc. le contenu effectif n'est évalué que lors de l'affichage instanciation, etc. le contenu effectif n'est évalué que lors de l'affichage
@ -28,7 +28,8 @@ Les syntaxes possibles sont:
`[[], $args...]` `[[], $args...]`
: contenu statique: les valeurs $args... sont insérées dans le flux du contenu : 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 sans modification. c'est la seule façon d'insérer un tableau dans la liste des
valeurs valeurs (on peut aussi utiliser une Closure, mais ce n'est pas toujours
possible, notamment si le contenu est une constante)
`["class_or_function", $args...]` `["class_or_function", $args...]`
`[["class_or_function"], $args...]` `[["class_or_function"], $args...]`