Comment configurer des variables à l’échelle du site en php ?

StackOverflow https://stackoverflow.com/questions/13000

  •  08-06-2019
  •  | 
  •  

Question

Je veux définir quelque chose comme ça dans php:

$EL = "\n<br />\n";

puis utilisez cette variable comme marqueur de « fin de ligne » sur tout mon site, comme ceci :

echo "Blah blah blah{$EL}";

Comment définir $EL une fois (dans un seul fichier), l'inclure sur chaque page de mon site et pas je dois le référencer en utilisant le (étrangement à l'envers) global $EL; déclaration dans chaque fonction de page ?

Était-ce utile?

La solution

La plupart des sites PHP devraient avoir un fichier (je l'appelle un en-tête) que vous incluez sur chaque page du site.Si vous mettez cette première ligne de code dans le fichier d'en-tête, incluez-la comme ceci sur chaque page :

 include 'header.php';

vous n'aurez pas besoin d'utiliser le mot-clé global ou quoi que ce soit, la deuxième ligne de code que vous avez écrite devrait fonctionner.

Modifier:Oh désolé, cela ne fonctionnera pas dans les fonctions...maintenant je vois ton problème.

Modification n°2 :Ok, suivez mon conseil initial avec l'en-tête, mais utilisez un définir() plutôt qu'une variable.Ceux-ci fonctionnent à l’intérieur des fonctions après avoir été inclus.

Autres conseils

Cela ressemble au travail d'une constante.Voir la fonction définir().

Utilisez-vous PHP5 ?Si vous définissez la fonction __autoload() et utilisez une classe avec des constantes, vous pouvez les appeler là où vous en avez besoin.La seule chose agaçante, c'est qu'il faut taper quelque chose un peu plus longtemps, comme

MyClass::MY_CONST

L'avantage est que si jamais vous décidez de changer la façon dont vous gérez les nouvelles lignes, vous n'aurez qu'à la modifier à un seul endroit.

Bien sûr, un inconvénient possible est que vous appelez une fonction supplémentaire (__autoload()), exécutant cette fonction (lorsque vous référencez la classe), qui charge ensuite un autre fichier (votre fichier de classe).Cela pourrait représenter plus de frais généraux que cela n’en vaut la peine.

Si je peux proposer une suggestion, ce serait d'éviter ce type d'écho qui nécessite des balises d'écho (comme <br />).Si vous pouviez configurer quelque chose d'un peu plus modèle, vous pourriez gérer les nl sans avoir à les saisir explicitement.Alors au lieu de

echo "Blah Blah Blah\n<br />\n";

essayer:

<?php
if($condition) {
?>
<p>Blah blah blah
<br />
</p>
<?php
}
?>

Il me semble simplement qu'appeler des classes ou inclure des variables dans des fonctions ainsi qu'à l'extérieur représente beaucoup de travail qui n'a pas besoin d'être fait et, dans la mesure du possible, il est préférable d'éviter ce genre de situations.

Fais ceci define ('el','\n\<\br/>\n'); enregistrez-le sous el.php

alors vous pouvez inclure tous les fichiers que vous souhaitez utiliser, c'est-à-dire

echo 'quelque chose'.el;// remarque, j'ajoute juste el en fin de ligne ou devant

J'espère que cette aide

REMARQUE, veuillez supprimer le '\' après < br car j'ai dû le mettre sinon il n'affichera pas la balise br sur la réponse...

@svec oui, ce sera le cas, il vous suffit également d'inclure le fichier dans la fonction.C'est ainsi que fonctionnent la plupart de mes logiciels.

function myFunc()
 {
require 'config.php';
//Variables from config are available now.
 }

Une autre option consiste à utiliser un objet avec des propriétés statiques publiques.J'avais l'habitude d'utiliser $GLOBALS mais la plupart des éditeurs ne complètent pas automatiquement $GLOBALS.De plus, les classes non instanciées sont disponibles partout (car vous pouvez les instancier partout sans dire à PHP que vous allez utiliser la classe).Exemple:

<?php

class SITE {
    public static $el;
}

SITE::$el = "\n<br />\n";

function Test() {
    echo SITE::$el;
}

Test();

?>

Cela produira <br />

C'est également plus facile à gérer que les constantes car vous pouvez mettre n'importe quel type de valeur dans la propriété (tableau, chaîne, int, etc.) alors que les constantes ne peuvent pas contenir de tableaux.

Cela m'a été suggéré par un utilisateur sur le Forums PhpEd.

svec, utilisez un framework PHP.N’importe lequel – il y en a plein.C'est la bonne façon de procéder.Avec Framework, vous avez un seul point d'entrée pour votre application, donc la définition des variables à l'échelle du site est facile et naturelle.Vous n'avez pas non plus besoin de vous soucier d'inclure des fichiers d'en-tête ni de vérifier si l'utilisateur est connecté à chaque page - un cadre décent le fera pour vous.

Voir:

Investissez du temps dans l’apprentissage de l’un d’entre eux et cela portera ses fruits très bientôt.

IIRC, une solution courante est un fichier simple contenant vos déclarations, que vous incluez dans chaque fichier source, quelque chose comme 'constantes.inc.php'.Là, vous pouvez définir un ensemble de variables à l'échelle de l'application qui sont ensuite importées dans chaque fichier.

Néanmoins, vous devez fournir la directive include dans chaque fichier source unique que vous utilisez.J'ai même vu certains projets utiliser cette technique pour fournir des localisations dans plusieurs langues.Je préférerais la méthode gettext, mais peut-être que cette variante est plus facile à utiliser pour l'utilisateur moyen.

modifier Pour votre problème, je recommande l'utilisation de $GLOBAUX[], voir Exemple n°2 pour plus de détails.

Si ce n'est toujours pas applicable, j'essaierais de déterrer les objets PHP5 et de créer un Singleton statique qui fournit les constantes statiques nécessaires (http://www.developer.com/lang/php/article.php/3345121)

Les sessions seront votre meilleur choix, si les données sont spécifiques à l'utilisateur, sinon utilisez simplement un fichier conifg.config.php :

<?php
$EL = "\n<br />\n";
?>

Puis sur chaque page ajoutez

require 'config.php'

vous pourrez accéder à $EL sur cette page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top