Operador de colon en PHP

Esto es parte del código de wordpress y no lo entiendo:

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 dos puntos puede reemplazar un corchete en PHP. Entonces, si sustituyo los dos puntos, obtengo esto:

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

No tiene sentido para mí, porque cada else si falta su apertura si.

Reggie,

dos puntos en declaraciones if / else en PHP: NO se trata de reemplazar llaves, sino un par de llaves.

Ejemplo:

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

se convertiría

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

O (dado que es solo una statement y no un bloque de declaraciones)

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

Referencia: Sintaxis alternativa para estructuras de control


En cuanto a esta pieza específica de código:

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

se traduce a

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

Sugerencia: La instrucción elseif NO incluye las otras instrucciones elseif. (like elseif ($a) { elseif($b) {} } )