Каков наилучший способ определения константы, которая является глобальной, т.е. должна быть доступна во всех файлах на 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;