Объявление констант PHP на основе условия

Я использую один отдельный файл для всех констант моего приложения PHP.

class constants
{
    const USERNAME = 'abc';
    /*
      ⋮
    */
}

Для позволяет, говорят USERNAME постоянный, значение может быть также xyz или abc на основе файла существует проверка. Если xyz файл существует USERNAME значение было бы xyz. Как я могу сделать эту регистрацию моего класса констант?

6
задан hakre 24 December 2012 в 23:45
поделиться

4 ответа

Если значение константы является переменным, то это не константа, а переменная.

Поскольку вы (правильно) пытаетесь сохранить содержимое своего приложения в капсуле и подальше от глобальной области видимости, вас может заинтересовать шаблон реестра. Реестр - это, по сути, прославленный массив, в котором хранится все, что вы добавляете в него, и который глобально доступен для всего вашего приложения.

Некоторые ресурсы:


РЕДАКТИРОВАТЬ Если вы действительно в отчаянии и должны переопределить константу, вы можете использовать

Runkit может быть недоступен, если вы находитесь на общем хостинге, и я считаю, что он нужен запах кода, но вот как вы в основном это сделаете (в начальной загрузке)

if ( file_exists('xyc') ) {
    runkit_constant_redefine('Constants::USERNAME', 'xyz');
}

РЕДАКТИРОВАТЬ Еще несколько параметров (все из которых тоже не совсем красивы):

class Abc { const FOO = 1; const BAR = 2; }
class Xyz extends Abc { const FOO = 2; }
class_alias(file_exists('abc') ? 'Abc' : 'Xyz', 'Constants');

Для этого вы должны переименовать свой текущий класс констант в Abc и добавить второй класс Xyz, чтобы расширить его и перезаписать константу USERNAME (FOO в примере). Это, очевидно, нарушит ваш код, потому что вы использовали Constants :: USERNAME , поэтому вам нужно создать псевдоним для прежнего имени класса. На какой класс будут указывать константы, решается с помощью условной проверки. Для этого требуется PHP5.3.

Решение до версии 5.3 заключалось в том, чтобы просто сохранить файл класса констант под двумя разными именами, например abc_constants.php и xyz_constants.php, измените последний соответственно, чтобы сохранить ИМЯ ПОЛЬЗОВАТЕЛЯ xyz , а затем включить либо, либо в зависимости от проверки файла.

Или замените значение USERNAME на заполнитель и вместо того, чтобы включать класс, вы загружаете его в переменную в виде строки. Затем вы заменяете заполнитель в соответствии с результатом проверки файла и eval строкой, эффективно включая таким образом класс.

Но я должен сказать это еще раз: я настоятельно рекомендую реорганизовать ваш код вместо их использования.

6
ответ дан 17 December 2019 в 02:26
поделиться

Невозможно иметь определения условных констант внутри классов.

0
ответ дан 17 December 2019 в 02:26
поделиться

Разве это: PHP Readonly Properties? не проще?

Мне кажется, вы пытаетесь неправильно использовать константы.

0
ответ дан 17 December 2019 в 02:26
поделиться

http://us2.php.net/manual/en/function.define.php

if ( $file_exists )
{
    define('MYCONSTANT', 'YEAH');
}
else
{
    define('MYCONSTANT', 'NOPE');
}
0
ответ дан 17 December 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: