Отладка - неправильно вложенный оператор PHP if - PullRequest
0 голосов
/ 12 февраля 2011

У меня довольно сложный PHP-оператор if с несколькими уровнями. Мне потребовалось некоторое время, чтобы добраться до этой точки, но я только что обнаружил, что if (ICL_LANGUAGE_CODE == 'fr') {} отображает true вне следующего кода, поэтому я знаю, что у меня есть синтаксическая ошибка Вот код

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

        <?php

        $post_id = get_the_ID();

        if (in_category( array('blog','blog-fr'))) {
                echo '<h4 class="post_date"><span class="smaller">Posted On </span> ';
                the_time('F j, Y');
                echo '</h4>';
        } elseif (in_category( array('events','evenements','featured','en-vedette','performances','performances-evenements','productions','productions-evenements','workshops','ateliers','world-citizen-dance','world-citizen-dance-evenements'))) {
                echo '<h4 class="event_top_date"><span class="month">';
                    //either it's THIS line
                    if (ICL_LANGUAGE_CODE == 'fr') { event_s_fr_month(); }
                    //or THIS one
                    else { if ( function_exists (event_date('start','M')));}
                echo '</span><span class="day">';
                if( function_exists (event_date('start','d')));         
                echo '</h4>';
        } else {
                echo '<h4 class="post_date"><span class="smaller">Posted On </span> ';
                the_time('F j, Y');
                echo '</h4>';
        } ?>

РЕДАКТИРОВАТЬ: Код ниже был обновлен из комментариев, но все еще не работает

        } elseif (in_category( array('events','evenements','featured','en-vedette','performances','performances-evenements','productions','productions-evenements','workshops','ateliers','world-citizen-dance','world-citizen-dance-evenements'))) {
                echo '<h4 class="event_top_date"><span class="month">';
                    if (ICL_LANGUAGE_CODE == 'fr') { event_s_fr_month();}
                    else { event_date('start','M');}
                echo '</span><span class="day">';
                if( function_exists (event_date('start','d')));         
                echo '</h4>';

Ответы [ 4 ]

2 голосов
/ 12 февраля 2011

http://php.net/manual/en/function.function-exists.php

function_exists () принимает строковый параметр, чтобы определить, существует функция с таким именем или нет.

скажем, event_date('start', 'd') возвращает строку "fri" или что-то

с этим: if( function_exists (event_date('start','d')));

вы говорите: если есть функция с именем 'fri () ', ничего не делать

Похоже, вы используете Wordpress, и я предполагаю, что функция event_date не отображается.Кроме того, вы должны быть в состоянии предположить, что функция существует.

попробуйте что-то вроде этого:

$post_id = get_the_ID();
$categories = array('events','evenements','featured','en-vedette','performances','performances-evenements','productions','productions-evenements','workshops','ateliers','world-citizen-dance','world-citizen-dance-evenements');
if( in_category( array('blog','blog-fr') ) )
{
    echo '<h4 class="post_date"><span class="smaller">Posted On </span> ';
    the_time('F j, Y');
    echo '</h4>';
}
elseif (in_category( $categories ) )
{
    echo '<h4 class="event_top_date"><span class="month">';
    if (ICL_LANGUAGE_CODE == 'fr')
    {
        echo event_s_fr_month();
    }
    else
    {
        echo event_date( 'start','M' );
    }
    echo '</span><span class="day">';
    event_date('start','d');
    echo '</h4>';
}
else
{
    echo '<h4 class="post_date"><span class="smaller">Posted On </span> ';
    the_time('F j, Y');
    echo '</h4>';
}

Если по какой-то причине вам нужны эти функции, оберните их так:1019 *

if( function_exists( 'event_date' ) )
{
    echo event_date( 'start','M' );
}
1 голос
/ 12 февраля 2011

Удалить эту точку с запятой

 else { if ( function_exists (event_date('start','M')));  <-- This semicolon }

И где истинная часть этого, если оператор помещает некоторый код, который будет выполнен, если существует переданная функция.

 else { if ( function_exists (event_date('start','M'))) {  //True part code here }  }

Вероятно, вам нужно if..elseif

if (ICL_LANGUAGE_CODE == 'fr')
{ 
    event_s_fr_month(); 
}
else if ( function_exists (event_date('start','M')))
{
  //code here
}
0 голосов
/ 12 февраля 2011

Что говорит netbeans ?

Использование php-редактора, который выделяет синтаксические ошибки, облегчает отладку таких ошибок.

Или используйте «Источник -> Формат"переформатировать, чтобы увидеть, как код вложен.

PS.

 if( function_exists (event_date('start','d'))

Выполняет функцию event_date () и проверяет, является ли возвращаемое значение существующей функцией.Я не видел эту конструкцию раньше, вы имели в виду:

 if ( function_exists('event_date') ) {
   event_date('start','d')
 }
0 голосов
/ 12 февраля 2011

Я совершенно уверен, что else { if ( function_exists (event_date('start','M')));} неверно.Вы, вероятно, хотите что-то вроде elseif ( function_exists (event_date('start','M'))){ // code here }.Где // code here - это любое действие, которое вы хотели бы предпринять, если это утверждение верно.

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