Reduire des lignes de code php

WRInaute impliqué
Bonjour,

je souhaite réduire un petit code php afin de le rendre plus lisible. Je m'expliquer, souhaite fusionner dans la mesure du possible les 2 bout de code. Je précise qu'il y a une bonne quarantaine de ligne pour chaque bout de code. Donc si la fusion des 2 était possible sans avoir besoin de recopier un par un chaque variable, cela m'aiderais beaucoup.

Le but étant que $content>set("",""); fasse la même chose que $primary>set("","");.
Merci d'avance pour votre aide

Code:
$primary->set("title", $title);
$primary->set("language", $language);
$primary->set("font", $font);
$primary->set("text", $text);
$primary->set("color", $color);

etc ...


$content->set("title", $title);
$content->set("language", $language);
$content->set("font", $font);
$content->set("text", $text);
$content->set("color", $color);

etc...
 
WRInaute accro
C'est l'instance de quelle classe $primary et $content ?

Parce que souvent on px faire du genre:
PHP:
<span class="syntaxdefault">$content</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">set</span><span class="syntaxkeyword">([</span><span class="syntaxstring">'foo'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $foo</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'bar'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $bar</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'baz'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $baz</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'qux'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $qux</span><span class="syntaxkeyword">]);&nbsp;</span><span class="syntaxdefault"></span>
ou même:
PHP:
<span class="syntaxdefault">$content</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">set</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">compact</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'foo'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'bar'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'baz'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'qux'</span><span class="syntaxkeyword">));&nbsp;</span><span class="syntaxdefault"></span>

Si c'est un système de template, souvent le template outer (layout) à accès au même variables que l'inner.

Sinon à la rache:
PHP:
<span class="syntaxdefault">$vars </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'title'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'language'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'font'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'text'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'color'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$vars as $var</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    $primary</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">set</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">$</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $content</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">set</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">$</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">);<br />}&nbsp;</span><span class="syntaxdefault"></span>
 
WRInaute accro
T'es sur que les autres méthodes ne sont pas possible ?
Parce que le foreach et variable variable c'est la pire.
 
WRInaute impliqué
Je sais pas si j'ai vraiment le choix car mon foreach se trouve derrière une requête sql :

Code:
$textquery = $mysqli->query('SELECT ...'); 
$rw = $textquery->fetch_assoc();

foreach($rw as $key => $value) {
	$primary->set($key, $value);
$content->set($key, $value);
}

Comme tu t'en doute c'est pour la mise en forme de mes template. J'ai besoin d'avoir les resultats de la requetes pour mes templates
 
WRInaute accro
HS: franchement c'est pas top cette classe template.
C'est des fichiers ".tpl", du coup tu ne profites pas du cache d'opcode.

L'autre que je t'avais montré est nettement mieux: http://platesphp.com/ ça s'installe avec composer, ça utilise l'autoloading, etc etc...
Avec de l'héritage de template c'est le pied: http://platesphp.com/templates/inheritance/

99% du temps j'utilise des frameworks (Laravel, CakePHP et Django) et ils ont tous ce système de base.
 
WRInaute impliqué
Malgré le foreach je n'arrive pas à faire ce que je souhaite. J'ai un message d'erreur :

Uncaught Error: Call to a member function set() on null in /home/u543399083/public_html/index.php:31 Stack trace: #0 {main} thrown in /home/u543399083/public_html/index.php on line 31

Voici mon code

Code:
include("template.class.php");

$primary = new Template("templates/primary.tpl");

$mysqli = new mysqli("mysql.hostinger.fr", "...", "...", "...");

//Requete principale

$textquery = $mysqli->query('SELECT title ... ); 
$rw = $textquery->fetch_assoc();

foreach($rw as $key => $value) {
	$primary->set($key, $value);
	//$content->set($key, $value);  me crée le message d'erreur !
	
}

$content = new Template("templates/cgu.tpl");
$content->set("content", 'texte content');

// ?? Comment faire pour que $content puisse afficher les meme informations que $primary ??

$primary->set("content", $content->output());

echo $primary->output();
 
WRInaute passionné
Salut, il faudrait déclarer $content avant de le mettre dans la boucle foreach !

Code:
....

$primary = new Template("templates/primary.tpl");
$content = new Template("templates/cgu.tpl");

....

foreach($rw as $key => $value) {
   $primary->set($key, $value);
   $content->set($key, $value); 
}

$content->set("content", 'texte content');

....
 
Discussions similaires
Haut