Если вы какое-то время работали с PHP-кодом, вы, скорее всего, уже сталкивались с константами define, а также с переменными:
Константы Define
Константа Define выглядит следующим образом:
define('SOMETHING', true);
С помощью define мы задаем глобальную константу, которая может использоваться в любом месте кода. В случае с WordPress это означает, что такие константы могут использоваться в различных плагинах и темах. Это очень полезно, если вы создали набор плагинов, каждый из которых может использовать тот же самый API-ключ. В таком случае вы можете просто попросить пользователя поместить define(‘MY_PLUGIN_API’, ‘123456’); в файл wp-config.php, сделав в коде своего плагина проверку этой константы.
Константа define не может быть повторно переопределена. Если вы вызовете ее дважды, вы столкнетесь с ошибкой, поэтому вы должны делать такие константы максимально уникальными.
Переменные
Переменная выглядит следующим образом:
$SOMETHING = true;
Переменные существуют только в том месте, где они определены, т.е. если у меня задана переменная в одной функции, я не могут ее вызвать в другой функции. Вы можете создать глобальные переменные, если необходимо, но если этого не сделать, переменная не будет доступна для всех функций.
Что из этого нужно использовать?
Стоит помнить, что define – это константы, а переменные – это, в общем, переменные (простите за тавтологию); идея заключается в том, что константа должна использоваться для тех вещей, которые не должны изменяться при выполнении кода. Если вещи, которые не должны меняться, остаются такими, это упрощает обслуживание кода.
Таким образом, как выглядит хороший define? Явно не так:
define('MY_PLUGIN_VERSION', '1.0');
Это константа. Это — то, что вы должны задать и то, что не должно быть перезаписано, однако фактически я могу сделать ее полем базы данных для проверки перед обновлением. Помните, вам нужно будет изменить этот define при обновлении, поэтому иметь такую константу несколько странно. Безусловно, вам не нужно, чтобы кто-то ее менял. Однако как быть, если вы сами хотите это сделать? Допустим, вы хотите, чтобы кто-то мог изменить ее, чтобы снова провести обновление?
В таком случае все это тоже не является удачным:
define( 'MY_PLUGIN_PATH', plugin_dir_path( __FILE__ ) ); define( 'MY_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); include( MY_PLUGIN_PATH . 'lib/asset.php') ;
Возможно, кто-то считает, что их директория плагинов является константой, и потому должна быть объявлена именно так. Возможно; однако это бессмысленное определение в WordPress. У вас уже есть plugins_url() (который не используется в данном примере), и потому объявлять все это в константах просто бессмысленно. Вот почему я добавил в пример вторую строку. По сути, две строки кода используются для вызова одной функции. Это бессмысленно.
Такое определение define становится полезным, когда у вас есть сложный плагин, состоящий из многочисленных файлов, и вам нужно получить в дополнительных файлах основной каталог плагина. Однако если ваш плагин состоит из одного файла (я часто сталкиваюсь с такими плагинами), это становится излишеством.
Вот хорошая константа define:
define('MY_PLUGIN_APIKEY', '123456');
Но она не должна стоять в самом коде. По крайней мере, в WordPress. Она должна быть в wp-config.php, как я уже говорил ранее.
В целом, нет никаких веских причин для использования define, за исключением тех вещей, которые остаются неизменными.
define(‘MY_PLUGIN_SUPPORT_HOME’,’http://help.example.com’); — хорошая константа; в принципе, в нее можно внести любую другую контактную информацию, которая не будет меняться.
Ваше мнение по этому вопросу?
Для чего вы используете define? Я, естественно, и сам допускал достаточно глупые ошибки, связанные с его применением. Интересно услышать ваше мнение.
Источник: halfelf.org/