2017-09-02 1 views
2

includepage.phpComment avoir correctement passer le contenu d'une page locale à une inclure la page en php

<?php 
echo $variable; 
?> 

localpage.php

<?php 
$variable = 'Content'; 
include 'includepage.php'; 
?> 

Comment correctement une page locale donne une variable un include. Je pensais aux cours, et j'ai essayé de l'instancier, mais je ne pouvais pas le faire fonctionner dans ma situation particulière. J'ai une page qui est un modèle de contenu pour toutes les pages et la variable $ est le contenu spécifique à chaque page locale. Ce que j'ai énuméré ci-dessus fonctionne mais ce n'est pas une bonne pratique.

+0

Cela a été un réel problème, quand 'register_globals' était encore une chose (il y a des décennies). Mais même aujourd'hui, vous devriez penser à ce qui se passe quand quelqu'un appelle 'includepage.php' directement. Les messages d'erreur peuvent contenir des informations que vous ne souhaitez pas partager. – jh1711

+0

Merci de m'avoir fait savoir pourquoi c'est une mauvaise pratique. Je pourrais le faire fonctionner avec des sessions aussi, mais ce n'est pas idéal. – Dolton42

+0

Ne fais pas ça. Vous avez deux bonnes réponses sur la façon de le faire correctement. Si vous avez besoin d'une solution rapide contre les appels directs, vous pouvez simplement définir une constante dans vos pages locales et vérifier si elle est définie dans la page d'inclusion. Wordpress et al. vivre avec ce pansement pendant des années. – jh1711

Répondre

1

Vous ne devriez jamais avoir de code dans un fichier d'inclusion qui est appelé au moment où le code est inclus. Votre fichier include ne doit contenir que des définitions de constante, de classe et de fonction. Le code est alors:

  • plus prévisible
  • plus facile à réutiliser
  • moins susceptibles d'exposer backdoors à votre application

Bien sûr, comme toute règle il y a des exceptions, mais la seule Je peux penser à ce qui a un mérite dans ce contexte lorsque vous utilisez un auto-préfixe inclure pour modifier le comportement de l'environnement tout en ne modifiant pas délibérément le code de l'application (par exemple en utilisant un gestionnaire de session personnalisé avec un étagère application).

Vous semblez décrire un modèle de contrôleur frontal - où les demandes de fonctionnalités différentes sont d'abord routées vers le même script PHP. Le terme «templating» est généralement appliqué à l'opposé de cette architecture - où la mise en page de plusieurs scripts php séparés est gérée par un fichier d'inclusion commun.

J'ai essayé de instancier mais n'a pas pu le faire fonctionner dans mes circonstances particulières

Réessayez. Vous ne serez jamais capable de construire une application de n'importe quelle complexité sans fonctions ou classes.

0

tehpage.php

<?php 
class tehpage { 
    public function __construct($parameters = null) { 
     //i.e. the parameters may determine which content is shown 
     $this->content = "page content"; 
    } 
    public function htmlOut() { 
     echo $this->content; 
    } 
} 
?> 

actualpage.php

<?php 
include "tehpage.php"; 
$page = new tehpage($variousparametersyoulikeIlikearrays); 
$page->htmlOut(); 
?> 

Comme ça?

+0

Je peux faire une fonction/classe simple. Mon problème était quand j'ai essayé de l'implémenter dans ma page de modèle dans le div donné. Les pages sont complexes et le contenu qui change n'est pas. – Dolton42

+0

J'essaie d'imaginer votre problème mais c'est moins évident que vous ne le pensez. Moar données s'il vous plaît? – deg