PHP устарел: Unparenthesized

#php

#php

Вопрос:

Я обнаружил эту ошибку отладки: PHP устарел: Unparenthesized a ? b : c ? d : e устарел. Используйте либо (a ? b : c) ? d : e или a ? b : (c ? d : e) в /home/ptl4lmmge5kb/public_html/wp-content/plugins/give-recurring/includes/admin/class-subscriptions-list-table.php в строке 143

Код из строки 143 плагина показывает это:

   ( ( 'all' === $key amp;amp; empty( $current ) ) ) ? 'class="current"' : ( $current == $key ) ? 'class="current"' : '',
  

Кто-нибудь может сказать мне, куда поместить круглые скобки?

Комментарии:

1. Это зависит от того, каков ваш результат, скобки работают так же в программировании, как и в математике, все, что находится внутри скобок, сначала оценивается, а затем сравнивается с внешним

2. 'all' === $key amp;amp; empty($current) ? 'class="current"' : ($current == $key ? 'class="current"' : '') слишком много ненужных () и там, где они нужны, не в нужном месте, кстати, по этой причине это плохая практика для вложенных тернеров

3. вместо этого напишите так: 'all' === $key amp;amp; empty($current) || $current === $key ? 'class="current"' : ''

4. Лоуренс прав, хотя включение пути /wp-content/plugins/ меня немного беспокоит. Это код, который вы написали, или код в каком-то стороннем плагине WordPress? Если это позже, я бы не ожидал редактировать этот код напрямую, а скорее обновить плагин, который вводит этот код.

5. Нет, я не пишу код. Это сторонний плагин под названием GiveWP — повторяющиеся пожертвования.

Ответ №1:

Принимая их первый запрос, они просят вас использовать формат, подобный этому (a ? b : c) ? d : e , в этом

  ( ( 'all' === $key amp;amp; empty( $current ) ) ) ? 'class="current"' : ( $current == $key ) ? 'class="current"' : ''
  

в этом случае разбейте его на их терминологию:

a ( 'all' === $key amp;amp; empty( $current ) ) — здесь была ненужная пара скобок, я их удалил, поскольку у нас и так достаточно проблем с сортировкой скобок

b — это 'class="current"'

c является ( $current == $key)

d — это 'class="current"'

e — это ''

они говорят, что хотят, чтобы вы разъяснили, что будет проверяться для второго? заключив условие и результат первого в круглые скобки

Первый: (a ? b : c)

который становится ( ( 'all' === $key amp;amp; empty( $current ) ) ? 'class="current"' : ( $current == $key ) )

Поэтому они просят вас использовать:

 ( ( 'all' === $key amp;amp; empty( $current ) ) ? 'class="current"' : ( $current == $key ) ) ? 'class="current"' : ''