9 votes

Meilleure pratique : où placer le code PHP ?

J'admets que cette question va être un peu vague, mais je vais essayer d'expliquer ce que j'essaie d'accomplir par quelques exemples. J'ai du code PHP qui charge un certain nombre de variables à partir de la base de données MySQL, contient quelques déclarations, quelques fonctions pour produire rapidement du code HTML, etc. Cependant, j'aimerais faire tout cela avant d'envoyer quoi que ce soit au client.

C'est ce que je fais :

<?php
include("somefile.inc");
function bla()
{
    ...
}

if (fails)
    echo "Error: ...<br />";

?>
<!DOCTYPE>
<html>
    <head>
        <script>
            ...
            <?php echo $someString; ?>
            ...
        </script>
    </head>
    <body>
        ...
    </body>
</html>

Tout se passe bien, jusqu'à ce que j'obtienne une erreur. L'écho ne s'affiche pas dans le navigateur car il est avant tout HTML... Donc j'ai modifié :

<!DOCTYPE>
<html>
    <head>
        <script>
            ...
            <?php echo $someString; ?>
            ...
        </script>
    </head>
    <body>
        <div class="error_block">
            <?php
            include("somefile.inc");
            function bla()
            {
                ...
            }

            if (fails)
                echo "Error: ...<br />";

            ?>
        </div>

        ...

    </body>
</html>

Maintenant, je peux vraiment voir les erreurs, ce qui est bien. Mais maintenant le problème se pose que dans l'en-tête, ou les scripts, je ne peux pas accéder aux variables qui seront chargées plus tard dans le error_block nouvellement créé.

Je n'aime vraiment pas diviser le code dans le error_clock en une partie au-dessus du document HTML et une partie dans le error_block. Et je ne veux pas non plus utiliser la fonction die() de PHP qui met fin abruptement à l'exécution.

Quelqu'un peut-il donner son avis sur la question ? Merci.

5voto

Phil Points 4432

Si vous cherchez une autre solution, j'en ai une pour vous. Ce que j'aime faire, c'est d'introduire la logique avant la fonction DOCTYPE

if(error) { $error = "Please do something" }

Puis, dans le document, j'ai un div juste pour l'erreur (Merci @Dave pour la contribution).

<?php echo $error != '' ? '<div id="error">' . $error . '</div>' : ''; ?>

Cette barre n'apparaîtra pas s'il n'y a pas d'erreur (c'est-à-dire si l'erreur a été détectée). $error est vide) et il est plus facile pour vous de styliser le message d'erreur comme vous le souhaitez.

#error { color:red; }

Si vous voulez être plus fantaisiste, vous pouvez utiliser un peu de jQuery pour masquer/afficher la division de sorte que l'erreur ne doive pas persister.

$('#error').show().delay(7000).fadeOut();

0voto

marklu Points 71

Vous devriez envisager d'utiliser des blocs try-catch et de générer des exceptions si vous souhaitez effectuer un post-traitement du message d'erreur, ce qui inclut son affichage.

-1voto

Ryan Points 1506

Ce que l'on oublie souvent, c'est que PHP est un langage de programmation INLINE par essence, ce qui signifie qu'il est conçu pour être traité par le serveur au fur et à mesure que celui-ci lit la page, et qu'il est donc conçu pour être divisé en morceaux. Récemment, la programmation orientée objet (POO) a été introduite dans PHP, ce qui le rend plus flexible.

Donc, avec cette information en main, je prendrais le chemin de la POO dans ce cas et ferais quelque chose comme :

<!DOCTYPE>
<?php
include("somefile.inc");
function bla()
{
    ...
}
function failureError($code){
    if(!empty($code)) ...
}
if ($a = $b) {
    code goes here 
} else {
    $code = 'error123';
}
?>
<html>
    <head>
        <script>
            ...
            <?php failed($code); ?>
            ...
        </script>
    </head>
    <body>
        ...
    </body>
</html>

En écrivant en utilisant des fonctions, vous pouvez réduire votre temps de développement et regrouper la majorité de votre code en appelant simplement ce dont vous avez besoin quand vous en avez besoin.

Une autre façon de déclarer vos classes/fonctions d'erreur pour aider le temps de réponse du serveur est de faire quelque chose comme :

if ($a = $b) {
    code goes here 
} else {
    include("errorStuff.php");
}

Cela n'inclura que la ou les classes/fonctions d'erreur lorsqu'une erreur est rencontrée.

N'oubliez pas que lorsque vous écrivez du PHP avec des techniques de POO comme celle-ci, le serveur mettra plus de temps à traiter le script que si vous écrivez en ligne. Le plus grand avantage d'une base OOP est qu'elle réduira votre temps de développement et, si elle est faite correctement, elle facilitera l'administration des futures mises à jour de votre script.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X