Reduire des lignes de code php

  • Auteur de la discussion Auteur de la discussion sff
  • Date de début Date de début
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...
 
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>
 
T'es sur que les autres méthodes ne sont pas possible ?
Parce que le foreach et variable variable c'est la pire.
 
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
 
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.
 
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();
 
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');

....
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut