2012-04-07 13 views
5

Questo fa parte del codice wordpress e io non lo capisco:operatore due punti in PHP

if  (is_404()   && $template = get_404_template()   ) : 
elseif (is_search()   && $template = get_search_template()  ) : 
elseif (is_tax()   && $template = get_taxonomy_template()  ) : 
elseif (is_front_page()  && $template = get_front_page_template() ) : 
elseif (is_home()   && $template = get_home_template()   ) : 
elseif (is_attachment()  && $template = get_attachment_template() ) : 
    remove_filter('the_content', 'prepend_attachment'); 
elseif (is_single()   && $template = get_single_template()  ) : 
elseif (is_page()   && $template = get_page_template()   ) : 
elseif (is_category()  && $template = get_category_template()  ) : 
elseif (is_tag()   && $template = get_tag_template()   ) : 
elseif (is_author()   && $template = get_author_template()  ) : 
elseif (is_date()   && $template = get_date_template()   ) : 
elseif (is_archive()  && $template = get_archive_template()  ) : 
elseif (is_comments_popup() && $template = get_comments_popup_template()) : 
elseif (is_paged()   && $template = get_paged_template()   ) : 
else : 
    $template = get_index_template(); 
endif; 

Un colon può sostituire una parentesi graffa in PHP. Quindi, se sostituisco i due punti, ottengo questo:

if  (is_404()   && $template = get_404_template()   ) { 
    elseif (is_search()   && $template = get_search_template()  ) { 
     elseif (is_tax()   && $template = get_taxonomy_template()  ) { 
     ... 
     } 
    } 
} 
else 

non ha senso per me, perché ogni elseif manca la sua apertura, se.

+9

Sono morto un po '... –

+2

questo è .... orribile. – dmp

+0

Penso di sapere cosa ha confuso l'OP ... –

risposta

17

Reggie,

due punti in if/else in PHP: non si tratta di sostituzione parentesi che un paio di parentesi graffe.

Esempio:

if ($a) : doThis(); 
elseif ($b) : doThat(); 
else : doTheOther(); 
endif; 

sarebbe diventato

if ($a) { doThis(); } 
elseif ($b) { doThat(); } 
else { doTheOther(); } 

O(dal momento che è solo una dichiarazione e non un blocco di istruzioni)

if ($a) doThis(); 
elseif($b) doThat(); 
else doTheOther(); 

Riferimento:Alternative Syntax for Control Structures


Per quanto riguarda questo specifico pezzo di codice:

if  (is_404()   && $template = get_404_template()   ) : 
elseif (is_search()   && $template = get_search_template()  ) : 
elseif (is_tax()   && $template = get_taxonomy_template()  ) : 

si traduce in

if  (is_404()   && $template = get_404_template()   ) 
    { /* DO NOTHING */ } 
elseif (is_search()   && $template = get_search_template()  ) 
    { /* DO NOTHING */ } 

Suggerimento: L'istruzione elseif NON include le altre istruzioni elseif. (come elseif ($a) { elseif($b) {} })