Может быть, вы надеетесь узнать, что variable_set - это волшебный способ хранения всех видов структурированных данных в вашей базе данных, а этот variable_get - способ его получения снова. К сожалению это не так.
«Постоянные переменные», как их часто называют, предназначены для относительно простых пар ключ-значение, которые должны сохраняться в запросах, пользователях и сеансах, часто до тех пор, пока администратор сайта не изменит значение. Хорошим примером является название сайта.
Итак, как это работает?
Когда Drupal загружается, все переменные читаются из кэша (если есть) или из таблицы переменных. (См. Variable_initialize для точного кода.) Переменные и хранятся в глобальной $conf
переменной, огромный массив. Drupal делает это, потому что это более эффективно, чем выполнение запросов к базе данных каждый раз, когда требуется переменная. (Это также причина, по которой variable_set не подходит для больших двоичных объектов данных: они будут загружаться при каждом запросе!)
Всякий раз, когда вы используете variable_get('variable_name', 'default_value')
, имя переменной ищется в массиве $ conf. Если он существует, значение возвращается; в противном случае возвращается значение по умолчанию.
Наконец, есть третий член семейства: variable_del . Как следует из названия, это удаляет переменную из таблицы переменных. Эта функция часто используется в реализациях hook_uninstall , удаляя переменные при удалении модуля.
Если вы ищете способы для хранения более сложных пользовательских структур данных в базе данных, посмотрите hook_schema и drupal_write_record или используйте систему сущностей Drupal и Entity API .
variable_set()
что кэш переменных перестраивается, поэтому он обычно зарезервирован для данных, которые достаточно долговечны и согласованны, например, настройки администратора и тому подобное. Или, другими словами, его не следует использовать вместо статических переменных между функциями, которые меняются во время сборки страницы, или как статические переменные.