print y echo son dos sentencias de PHP prácticamente equivalentes y se puede utilizar cualquiera de las dos en las mismas situaciones. Sin embargo, hay alguna diferencia entre ellas:
<?php
$titulo = "Diferencias entre print y echo";
echo "<p>", $titulo, "</p>";
print "<p>" . $titulo . "</p>\n";
?>
<p>Diferencias entre print y echo</p>
<p>Diferencias entre print y echo</p>
Eso permite utilizar print en construcciones en que no se puede utilizar echo. Por ejemplo en el siguiente programa:
<?php
$numero = 5;
print "<p>El número $numero es ";
if ($numero >= 0) {
print "positivo";
} else {
print "negativo";
}
print "</p>\n";
?>
<p>El número 5 es positivo</p>
... la construcción if else puede escribirse utilizando el operador ternario ? : de la siguiente manera:
<?php
$numero = 5;
print "<p>El número $numero es ";
$numero >= 0 ? print "positivo" : print "negativo";
print "</p>\n";
?>
<p>El número 5 es positivo</p>
En este caso la utilización de echo produciría un error:
<?php
$numero = 5;
print "<p>El número $numero es ";
$numero >= 0 ? echo "positivo" : echo "negativo";
print "</p>\n";
?>
En resumen, no parece haber una razón de peso para preferir usar print en vez de echo o viceversa. Parece que la elección de uno u otro es personal y basada en la costumbre o la familiaridad con otros lenguajes o entornos en los que uno de los dos está más extendido. En estos apuntes se utiliza siempre print.
Los controles ocultos es una de las maneras de pasar información entre varias páginas (también se pueden utilizar las sesiones o las cookies).
El siguiente ejemplo ilustra el uso de controles ocultos.
El programa anterior está formado por por tres páginas:
Aunque las tres páginas están relacionadas, hay que tener en cuenta que cada página es un programa independiente (la primera página ni siquiera es un programa, es una simple página html). En PHP cada programa (es decir, cada página) solo conoce los datos que le envía el formulario que lo llama. Y cada formulario sólo envía los datos de los controles incluidos en el formulario.
En el ejemplo anterior, si los únicos controles de los formularios fueran las cajas de texto (para el nombre y el apellido), la segunda página sólo recibiría el nombre y la tercera página sólo recibiría el apellido. como muestra la imagen siguiente:
¿Cómo puede entonces enviar la segunda página el nombre que recibió de la primera? Una forma de conseguirlo es que la segunda página incluya un control oculto que contenga el nombre recibido de la primera página. De esa manera la tercera página recibirá dos controles, el nombre (control oculto) y el apellido (caja de texto), como muestra la imagen siguiente:.
El carácter & (que en español se llama et y en inglés ampersand) tiene un significado especial en HTML, ya que se utiliza como carácter inicial de las entidades de carácter.
Si en una página web se quiere mostrar el carácter & hay que emplear la entidad de carácter correspondiente &
<?php
print "<p>La décima novela de Julian Barnes es Arthur & George.</p>\n";
?>
La décima novela de Julian Barnes es Arthur & George.
El carácter & aparece también en dos contextos especiales:
<?php
header("Location:http://www.example.com?nombre=Pepito&edad=25");
?>
<?php
print "<p><img src=\"dibujo.php?ancho=100&alto=50\" alt=\"dibujo\"></p>\n";
?>
En Matemáticas, la división de números enteros está definida de manera que el resto sea siempre positivo. Así, estos serían en Matemáticas los resultados de cuatro divisiones en los que intervienen enteros positivos y negativos:
Pero en los lenguajes de programación, la división de números enteros no sigue siempre esa regla.
En el caso de PHP (y JavaScript), la regla es que el resto sea del mismo signo que el dividendo. Así, estos serían en PHP los resultados de las cuatro divisiones del ejemplo anterior, que se obtendrían con la función intdiv() y el operador %:
Si el dividendo es positivo, el resultado es el mismo, pero si el dividendo es negativo, el resultado es diferente.
Otros lenguajes siguen otras reglas. Por ejemplo, en Python el resto tiene el mismo signo que el divisor y en otros, como C o C++, el resultado no está definido y depende del compilador.
Referencia: Resto de la división de enteros (Wikipedia)