Задать переменную PHP и получить параметр WooCommerce одновременно? - PullRequest
0 голосов
/ 27 ноября 2018

Я вижу следующий код в WordPress и не понимаю, какая операция происходит:

$debug_mode = 'yes' === get_option( 'woocommerce_shipping_debug_mode', 'no' );

Это похоже на некоторую комбинацию (1) установки переменной и (2) проверки ее идентичностик опции, установленной в WordPress.Может ли кто-нибудь разобрать логику / операторы в этом сценарии?

Кроме того, почему кто-то может использовать это словосочетание, а не просто получить опцию?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

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

0 голосов
/ 27 ноября 2018

Это то, что известно как троичный .

Однако из-за стиля кода (отсутствие паренов) немного сложнее увидеть, что на самом деле происходит.

$debug_mode = 'yes' === get_option( 'woocommerce_shipping_debug_mode', 'no' );

Я предпочитаю обернуть условие в параны, чтобы сделать его немного более очевидным:

$debug_mode = ( 'yes' === get_option( 'woocommerce_shipping_debug_mode', 'no' ) );

Что теперь выглядит более ясно как то, что это - назначение к переменной $debug_mode того, является ли параметр woocommerce_shipping_debug_mode равным === к yes (который вернет либо TRUE, либо FALSE.

"Длинная рука"что бы это выглядело так:

$debug_mode = ( 'yes' === get_option( 'woocommerce_shipping_debug_mode', 'no' ) ) ? TRUE : FALSE;

Но, так как условие возвращает TRUE или FALSE, часть ? TRUE : FALSE является избыточной.

Для явно ответит на ваш второй вопрос: «зачем кому-то использовать это словоблудие», - они просто получают значение параметра - они написали его так, потому что это краткое .прекрасный пример того, почему мы должны писать код для людей , а не только для машин:)

0 голосов
/ 27 ноября 2018

В этом случае вы не получаете опцию, а присваиваете результат проверки debug_mode.Логическая операция === будет иметь приоритет перед назначением, поэтому при оценке на полпути возвращается

$debug = true;  // if the get_option is set to 'yes'

и

$debug = false; // otherwise
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...