web-dev-qa-db-fra.com

PHP code dans le modèle de page vs fonctions

J'ai créé de nombreux sites WordPress et appris PHP des pratiques qui me semblent correctes, c.-à-d. Que les fonctions vont dans un fichier functions.php. avoir directement PHP en eux, etc.

Mais je suis un peu fragile sur le "pourquoi". Qu'y a-t-il entre les modèles de page et le fichier de fonctions qui modifie ce qui fonctionne et ne fonctionne pas dans chacun? Je suppose que c'est l'ordre de chargement, mais toute orientation/direction plus avancée serait appréciée.

Edit - D'accord, je comprends l'aspect "meilleures pratiques". Les fonctions sont censées être réutilisables, etc. Je recherche davantage les raisons techniques pour lesquelles/pourquoi cela ne fonctionne pas.

7
tmdesigned

Malgré l'absence de réponses "officielles", cette question est encore assez populaire, donc un an plus tard, je posterai mes réflexions consolidées à ce sujet.

Ce qui a conduit à cette question, c’est l’expérience du travail du code à certains endroits et pas à d’autres. Par exemple, pourquoi devais-je insérer le code dans une fonction dans functions.php au lieu de le mettre là-dedans, alors que je pouvais le conserver en vrac dans un fichier modèle? C'était comme s'il y avait une différence fondamentale dans la façon dont WordPress traite le code à différents endroits.

Mais bien sûr, ce n'est pas exact. PHP est PHP, et WordPress suit son chemin joyeusement, ligne par ligne.

Comme je l'ai écrit dans ma question initiale et comme l'ont affirmé Krzysiek et d'autres, la principale différence réside dans l'ordre de chargement. Mais l'ordre de chargement dans WordPress est tout.

Le functions.php d'un thème est chargé, relativement parlant, très tôt. C'est encore beaucoup en phase préparatoire. Les fonctions clés de WordPress sont prêtes, telles que add_action (), de même que les plugins et les globals. Mais ce n'est pas prêt pour vous de commencer faire choses encore. La sortie de la page n'est pas encore écrite, la boucle principale n'est pas en cours d'exécution, etc.

Donc, si vous mettez une ligne de code lâche pour faire quelque chose "maintenant" dans functions.php, c'est probablement trop tôt. Au lieu de cela, les lignes de code en vrac ici devraient être de nature préparatoire, c'est-à-dire "faire ceci plus tard" ou "voici une constante pour plus tard", ou, comme le suggère le nom du fichier, "voici une fonction à exécuter plus tard".

Les fichiers modèles, en revanche, sont exécutés relativement tard. Le processus de chargement de WordPress est tel qu'il dispose de suffisamment d'informations pour choisir le fichier de modèle correct pour la demande de l'utilisateur. Presque tous les codes peu lisibles ont du sens ici, car nous approchons de la fin du cycle. Tout le reste est mis en place et nous construisons déjà notre production.

Avec tout cela en tête, les choses commencent à se focaliser. Pourquoi une erreur de syntaxe dans functions.php provoque-t-elle un écran blanc mortel, alors qu'une erreur de syntaxe dans un fichier de modèle coupe la page au milieu? Parce que functions.php est en cours d'exécution avant toute sortie, une erreur casse les choses avant qu'il ne reste plus rien à afficher, mais un fichier de modèle peut être à mi-chemin de la sortie.

Cela revient donc à la séquence, mais d'une manière plus profonde que je ne le pensais à l'origine.

p.s. Ce qui m'a aidé à mieux comprendre cela au cours de la dernière année, est (a) une meilleure compréhension de l'ordre de chargement obtenu en parcourant la séquence de chargement avec xDebug, en observant littéralement le déroulement des événements, et (b) une compréhension plus profonde des hooks. Comme l'ordre de chargement est si important dans WordPress, le système de crochets est essentiel. C'est comme voyager dans le temps pour votre code.

2
tmdesigned