2012-04-07 22 views
5

Esto es parte del código de wordpress y no entiendo que:operador dos puntos en 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 puede sustituir a un corchete en PHP. Así que si sustituyo los dos puntos, me sale 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í, ya que cada elseif falta su apertura si.

+9

Me morí un poco ... –

+2

eso es ... horrible. – dmp

+0

Creo que sé lo que confundió al OP ... –

Respuesta

17

Reggie,

dos puntos en sentencias if/else en PHP: no se trata de la sustitución de apoyos pero un par de llaves.

Ejemplo:

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

se convertiría en

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

O(ya que es sólo una declaración y no un bloque de instrucciones)

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

Referencia:Alternative Syntax for Control Structures


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 en

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 demás instrucciones elseif. (como elseif ($a) { elseif($b) {} })