web-dev-qa-db-fra.com

php - Meilleure façon de définir la constante globale (disponible dans tous les fichiers)

Quel est le meilleur moyen de définir une constante qui est Global i.e devrait être disponible dans tous les fichiers en PHP.

Merci

UPDATE: Quelles sont les différences entre les constantes et les constantes de classe, peuvent-elles être utilisées indifféremment?

18
cldy1020

Définissez votre constante dans votre fichier top .php, qui sera inclus dans tous les autres scripts. Il peut s'agir de votre contrôleur frontal, de votre fichier de configuration ou d'un fichier créé à cette fin.

define('MY_CONST', 'hello');
20
Samy Dindane

faire ce qui suit:

define("CONSTANT_NAME","value");

si vous voulez accéder à cette constante à partir d'autres fichiers php, vous devez l'inclure:

include_once("thefilewiththeconstant.php");
8
Sebastian Breit

Lorsque vous souhaitez utiliser des constantes globales dans des fichiers PHP, je pense qu'une bonne pratique consiste à utiliser les principes orientés objet et à les définir dans des classes pertinentes. En utilisant la fonction spl_autoload_register () intégrée à PHP, vous pouvez définir toutes vos classes ultérieures pour étendre la "classe globals" associée sans vous soucier de l'inclusion manuelle de fichiers partout. Toutes les classes enfants ultérieures de cette classe globals auront toujours accès aux variables globales associées. (Je dis lié parce que c'est bien de concevoir que les constantes globales dans une classe soient liées d'une manière ou d'une autre, plutôt que de tout regrouper sans rime ni raison)

1
user6659166

vérifie ça

<?php
//Global scope variables
$a = 1;
$b = 2;

 function Sum()
 {
global $a, $b;

$b = $a + $b;
 } 

Sum();
echo $b;
?>
1

Un meilleur moyen est de vérifier si la constante est affectée à quelque chose et si elle n'est assignée à rien, affectez-la, sinon affectez-la à NULL, puis affectez-la à votre constante

defined("FOO") ? null : define("FOO", "BAR");
0
Rust

Quel que soit le fichier dans lequel vous créez votre ou vos constante (s), vous devrez l'exiger/l'inclure dans les fichiers que vous allez utiliser.

Sinon, vous pouvez utiliser le global $ _SESSION, mais cela nécessite l'initialisation de la session par session_start() au début de votre code dans chacun de ces fichiers.

0
inhan

Ça dépend. Dans votre cas, je choisirais define() car sa syntaxe est plus compacte. Mais define() ne peut contenir que des valeurs scalaires dans PHP <7.0 Si vous avez besoin d’un tableau associatif, vous n’avez pas d’autre choix que de choisir $GLOBALS ou d’utiliser PHP> = 7.0. 

// Storing a single value works fine with define
define( 'ROOT_DIR', dirname(dirname(__FILE__)) . '/' );

// But not for complex data types like this array
$USERPIC_PARAMS = array(
            "user_root"       => "images/users",
            "padding_length"    => 8,
            "split_length"      => 4,
            "hash_length"         => 12,
            "hide_leftover"     => false
    );

// Then you need $GLOBALS
$GLOBALS['USERPIC_PARAMS']  = $USERPIC_PARAMS;
// Or in PHP >=7.0
define( 'USERPIC_PARAMS', $USERPIC_PARAMS );

// output your define
echo ROOT_DIR;
// output your $GLOBALS var
echo $GLOBALS['USERPIC_PARAMS'];
// output in PHP >=7.0 your constant
echo USERPIC_PARAMS;
0
Hexodus