2010-12-13 7 views
5

Duplicar posible:
PHP closing tag¿Cuál es la ventaja de no incluir una etiqueta de cierre `?>` En un archivo de clase PHP?

he visto muchos archivos de clases PHP que no tienen un cierre ?> así que en vez de esto:

<?php 
class DataTypeLine extends DataType { 
    ... 
} 
?> 

que sólo tiene este :

<?php 
class DataTypeLine extends DataType { 
    ... 
} 

También noto cuando se crea un nuevo archivo PHP en Eclipse Helios, el valor predeterminado es tener sólo una etiqueta a partir <?php pero ninguna etiqueta final?>.

¿Cuál es la ventaja de no tener una etiqueta de cierre ?>?

Respuesta

8

Sin ninguna ventaja real: ayuda a garantizar que no haya espacios en blanco inadvertidos que se generen al agregar nuevas líneas al final del archivo que pueden arruinar cosas como el envío de encabezados y cosas así.

Por ejemplo, un archivo de la siguiente manera:

<?php 
    /* do stuff */ 
?> 

<!-- note the empty space above, this comment not really part of the code --> 

se romperá un archivo que utiliza como este

<?php 
    require 'myfile.php'; 
    header('Location: http://example.com/'); 
?> 

con la salida ya ha sido enviada errores, debido a esas líneas en blanco en el primer archivo . Al no usar el ?>, evita ese posible problema.

+0

¿Podría explicar por qué el espacio puede generar un error? – lvarayut

+0

¡Pruébalo! Ejemplo siempre error –

1

Es una recomendación de estilo de codificación para principiantes. PHP come un solo \n después de la etiqueta de cierre. Sin embargo, muchos recién llegados inadvertidamente dejan espacios o pestañas adicionales o múltiples líneas nuevas ahí. En Windows, esto se ve agravado por tener un \r\n en la etiqueta de cierre ?>, lo que conduce a los isses tan pronto como los scripts se implementan en los servidores Unix.

Salir de la etiqueta de cierre también se concibe como optimización por algunos (como comillas simples).

5

Desde el PHP documentation

La etiqueta de cierre de un bloque de PHP al final de un archivo es opcional, y en algunos casos omitiendo es útil cuando usando include() o require() , por lo que espacios en blanco no deseados no se producirá en el al final de los archivos, y todavía podrá ser capaz de agregar encabezados a la respuesta más tarde. También es útil si usa buffering de salida y no desea que vea espacios en blanco no deseados adicionales en al final de las partes generadas por los archivos incluidos.

Cuestiones relacionadas