Нельзя присвоить переменную константе класса, потому что , как указано в документации :
Значение должно быть выражением константы, а не (например)переменная, свойство или вызов функции.
Оценка переменной происходит во время выполнения, тогда как оценка константы класса происходит во время компиляции.При установке констант класса эти переменные еще не готовы к использованию.
Тем не менее, похоже, что ваш дизайн неправильный, IMO.
Если эти константы принадлежат классу, они должныбыть определенным там, а не в другом месте.И не определено более одного раза (как вы сделали бы, если бы вы использовали внешние значения для инициализации констант класса).
Так что либо определите их там непосредственно в классе, либо определите их в каком-то другом файле, используя const
в другом файле и установка этих констант как глобально доступных.
constants.php
const FOO = 'BAR';
consuming_file.php
require_once('constants.php');
var_dump(defined('FOO'));
// outputs bool(true)
Если вы согнутыпри использовании переменной для определения этих констант, даже если вы определяете где-то еще, вы можете использовать define()
.Это работает с переменными выражениями, поскольку оно оценивается во время выполнения.Но вы не можете использовать их в определении класса .
moreconstants.php
$bar = 'baz';
define('FOO', $bar);
echo FOO;
// outputs 'baz';
Как ни странно, константы, определенные с помощью define()
, могут использоваться для инициализации констант класса с использованием const
, независимо от того, где определены исходные константы.