Каков наилучший способ определения глобальной константы, т.е. Доступной во всех файлах PHP?
ОБНОВЛЕНИЕ: Каковы различия между константами и константами класса? Могут ли они быть взаимозаменяемыми?
Каков наилучший способ определения глобальной константы, т.е. Доступной во всех файлах PHP?
ОБНОВЛЕНИЕ: Каковы различия между константами и константами класса? Могут ли они быть взаимозаменяемыми?
Определите вашу константу в вашем верхнем .php файле, который будет включен во все остальные скрипты. Это может быть ваш фронт-контроллер, ваш конфигурационный файл или файл, созданный для этой единственной цели.
!defined('MY_CONST') && define('MY_CONST', 'hello');
выполните следующие действия:
define("CONSTANT_NAME","value");
если вы хотите получить доступ к этой константе из других php файлов, вы должны включить ее:
include_once("thefilewiththeconstant.php");
проверьте это
<?php
//Global scope variables
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
Если вы хотите использовать глобальные константы в файлах PHP, я считаю, что хорошей практикой является использование объектно-ориентированных принципов и их определение в соответствующих классах. Используя функцию spl_autoload_register(), встроенную в PHP, вы можете определить все ваши более поздние классы, чтобы расширить связанный "класс глобалов", не беспокоясь о том, чтобы включать файлы вручную повсюду. Все последующие дочерние классы этого класса globals всегда будут иметь доступ к связанным глобальным переменным. (Я говорю, потому что это хороший дизайн, чтобы иметь глобальные константы в классе, в некотором роде, чем все, сгруппированные вместе без рифмы или разума)
Какой бы файл ни создавал ваши постоянные элементы, вам придется потребовать/включить его в файлы, которые вы будете использовать.
В противном случае вы можете использовать глобальный $_SESSION, но для начала инициализации сеанса требуется session_start()
в начале вашего кода в каждом из этих файлов.
Лучше всего проверить, назначена ли константа чему-либо и если она не назначена никому, а затем назначить ее, иначе назначьте ее NULL, а затем назначьте ее константе
defined("FOO") ? null : define("FOO", "BAR");
Это зависит. В вашей ситуации я бы пошел на define()
, потому что он имеет более компактный синтаксис в использовании. Но define()
может удерживать только скалярные значения в PHP < 7.0. Если вам нужен i.e ассоциативный массив, у вас нет другого выбора, то пойти на $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;