J'ai programmé en PHP voici qq temps déjà des fonctions me permettant de poster des news en PHP sous différentes formes. Ces news sont stockées dans des fichiers textes (format CSV), pour des raisons de rapidité et de facilité de maintien (ça se discute, mais bon...). Je voudrais bien les diffuser avec d'autres fonctions -pour faire une sorte de package permettant de mettre en place un weblog léger avec forum et sans db et bon du point de vue du référencement dans les moteurs de recherche)- mais pour cela j'essaie d'assainir le code.
Ma question est la suivante : que faut-il mieux du point de vue rapidité d'éxécution entre faire une fonction par type d'affichage et faire une fonction générale avec des 'switch ... case' ? Je m'explique.
Mes news peuvent s'afficher sous forme de liste, de sommaire, de résumé ou complètes. Pour le moment, j'ai donc show_news_short, show_news_summary, show_news_abstract et show_news_full. D'où copier-coller de code -> pas beau ! Je pense donc faire une fonction unique show_new qui comprenne des switch ... case prenant en compte les différentes forme d'affichage. Cependant, un de ces switch ... case se retrouverait dans la boucle 'while' lisant le fichier de news ligne par ligne. D'où ralentissement par rapport à la première solution (à moins que PHP ne 'compile' le code présent dans la boucle ?).
Qu'en pensez-vous ?
Autre question : procédures ou méthodes dans des objets ?
# Re: Une question de PHP
Posté par ukemi . Évalué à 2.
[^] # Re: Une question de PHP
Posté par Robert VISEUR (site web personnel) . Évalué à 1.
[^] # Re: Une question de PHP
Posté par ukemi . Évalué à 2.
[^] # Re: Une question de PHP
Posté par Robert VISEUR (site web personnel) . Évalué à 1.
[^] # Re: Une question de PHP
Posté par ukemi . Évalué à 1.
n'hésite pas a demander si tu as encore besoin d'aide
[^] # Re: Une question de PHP
Posté par Robert VISEUR (site web personnel) . Évalué à 1.
Or, si je fais :
function show_news($mode, $news)
{
while ...
{
include('templates/news_' . $mode);
}
}
c'est pas très beau non plus :-) !
[^] # Re: Une question de PHP
Posté par ukemi . Évalué à 1.
{
$news = get_news($id);
show_news($mode, $news);
}
c'est pas mieux ?
(bien sur je suppose ici que get_news() récupère les données de la news ayant pour id $id)
[^] # Re: Une question de PHP
Posté par Robert VISEUR (site web personnel) . Évalué à 1.
[^] # Re: Une question de PHP
Posté par ukemi . Évalué à 2.
explique un peu le principe ? peut etre que ça existe sous un autre nom ou qu'on peut l'émuler
[^] # Re: Une question de PHP
Posté par Robert VISEUR (site web personnel) . Évalué à 1.
Donc l'idée, c'est d'initialiser ton pointeur sur fonction avant la boucle, en fonction de ce que tu veux comme affichage. Le code dans le corps de la boucle resterait le même puisque tu n'utilises que le nom du pointeur sur fonction, qui ne change pas.
Voir par exemple http://www.ann.jussieu.fr/courscpp/Sections/Sect05-H0.html(...)
[^] # Re: Une question de PHP
Posté par Hardy Damien . Évalué à 2.
function truc ($machin) { return $machin; }
$ma_fonction = 'truc';
echo $ma_fonction('hello world');
?>
Dam
[^] # Re: Une question de PHP
Posté par tuan kuranes (site web personnel) . Évalué à 2.
Tu stocke "machin" dans la var foo, puis tu fais $foo() .... qui en fait appelle la fonction machin. Cherche variable de variable dans la doc php
Et ca peut aller plus loin encore... enfin l'idee c'est d'eviter le switch. Mais c'est du bricolage infame qui donne des maux de tetes avec une doc illisible et une maintenance sans fin.
Le mieux c'est d'utiliser les concepts objets, notemment l'heritage.... Avec une classe abstraite qui contient toutes les fonctions utilisees par tous et les fonctions virtuelle pure et des classes concretes filles avec des fonctions specifique a ton affichage.
Si tu connais pas, c'est l'occasion de t'y mettre :
http://uml.free.fr(...)
http://sebsauvage.net/comprendre/objet/objet_heritage.html(...)
[^] # Re: Une question de PHP
Posté par ukemi . Évalué à 1.
[^] # Re: Une question de PHP
Posté par Robert VISEUR (site web personnel) . Évalué à 1.
En tout cas, merci à tous pour vos commentaires constructifs.
[^] # Re: Une question de PHP
Posté par Colargol . Évalué à 3.
Et pourquoi pas ne pas utiliser de vrais templates, qui sont justement conçus pour séparer le traitement de la présentation ?
P.ex en utilisant Smarty (http://smarty.php.net(...)) :
Il y a bien sûr un prix à payer (en temps d'exécution) pour cette souplesse mais il est faible car les templates sont 'compilés' en vrai code php et la page html générée par un template peut être optionnellement cachée.
Le gain de cette approche est la facilité de mise au point (une console permet de visualiser le contenu des variables passées au template) et de maintenance (p.ex pour la gestion d'un site multilingue).
[^] # Re: Une question de PHP
Posté par ukemi . Évalué à 1.
[^] # Re: Une question de PHP
Posté par Colargol . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.