php – Лучший способ определить глобальную константу (доступен во всех файлах)

Каков наилучший способ определения константы, которая является глобальной, т.е. должна быть доступна во всех файлах на PHP.

благодаря

ОБНОВЛЕНИЕ: Каковы различия между константами и константами класса, можно ли их использовать взаимозаменяемо?

Определите свою константу в своем верхнем файле .php, который будет включен во все остальные скрипты. Это может быть ваш фронт-контроллер, ваш файл конфигурации или файл, созданный для этой единственной цели.

define('MY_CONST', 'hello'); 

сделайте следующее:

 define("CONSTANT_NAME","value"); 

если вы хотите получить доступ к этой константе из других php-файлов, вы должны включить ее:

 include_once("thefilewiththeconstant.php"); 

Если вы хотите использовать глобальные константы в файлах PHP, я считаю, что хорошей практикой является использование объектно-ориентированных принципов и их определение в соответствующих классах. Используя функцию spl_autoload_register (), встроенную в PHP, вы можете определить все ваши более поздние классы, чтобы расширить связанный «класс глобалов», не беспокоясь о том, чтобы включать файлы вручную повсюду. Все последующие дочерние классы этого класса globals всегда будут иметь доступ к связанным глобальным переменным. (Я говорю, потому что это хороший дизайн, чтобы глобальные константы в классе были связаны каким-то образом, а не все, сгруппированные вместе без рифмы или разума)

Какой бы файл ни создавал ваши константы, вам придется потребовать / включить его в файлы, которые вы будете использовать.

В противном случае вы можете использовать глобальный $ _SESSION, но для начала инициализации сеанса session_start() в начале вашего кода в каждом из этих файлов.

Проверь это

 <?php //Global scope variables $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?> 

Лучше всего проверить, назначена ли константа чему-либо, и если она не назначена ни на что, тогда назначьте ее, иначе назначьте ее NULL, а затем назначьте ее константе

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

Это зависит. В вашей ситуации я бы пошел на define() потому что он имеет более компактный синтаксис в использовании. Но define() может хранить только скалярные значения в PHP <7.0. Если вам нужно, то есть ассоциативный массив, у вас нет другого выбора, чтобы перейти на $GLOBALS или использовать 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;