Подтвердить что ты не робот

Переопределение констант в PHP

Можно ли переопределить константу в php, которая была определена функцией define? У меня есть класс с несколькими константами, который содержит данные пользователя. Я пытаюсь использовать класс для нескольких пользователей.

define('ALLEGRO_ID', 'id');
define('ALLEGRO_LOGIN', 'login');
define('ALLEGRO_PASSWORD', 'passwd');
define('ALLEGRO_KEY', 'key');
define('ALLEGRO_COUNTRY', 123);

$allegro = new AllegroWebAPI( );                
$allegro -> Login();

Я не писал этот класс, но я использую его из-за ограничений по времени. Я не знаю, почему создатель этого класса defined пользовательских данных вместо использования переменных в экземпляре.

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

4b9b3361

Ответ 1

Если у вас установлено расширение runkit, вы можете использовать runkit_constant_redefine():

runkit_constant_redefine("name", "value");

В большинстве случаев, однако, было бы лучше пересмотреть, почему вы используете константы, а не что-то более подходящее.

Ответ 2

Нет, вы не можете переопределить константу (кроме runkit_constant_redefine),
что называется CONSTANT.

То, что вы ищете в классе, на самом деле является переменной объекта в формате массива: -

class user
{
  public $user = array();

  function load($user_id)
  {
    // etc
    $this->$user[$user_id] = something_else;
  }
}

Ответ 3

В PHP 5. 6+ вы можете импортировать константы под псевдонимом. Такой псевдоним может перезаписать уже существующую константу.

Следующий фрагмент выведет int(5):

define('ALLEGRO_ID', 3);
define('NEW_ALLEGRO_ID', 5);
use const NEW_ALLEGRO_ID as ALLEGRO_ID;
var_dump(ALLEGRO_ID);

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

Наконец, такое поведение позволяет создавать очень запутанные ситуации, такие как use const true as false; ,

Ответ 4

Значение константы после определения остается неизменным во всей программе. Если у вас есть такое требование, когда вы хотите изменить значения в будущем, сохраните такие значения в переменных PHP.