Buscar..


Introducción

Para construir un programa PHP dinámico e interactivo, es útil generar variables y sus valores. El lenguaje PHP permite múltiples métodos de salida de valor. Este tema cubre los métodos estándar de impresión de un valor en PHP y dónde se pueden usar estos métodos.

Observaciones

Las variables en PHP vienen en una variedad de tipos. Dependiendo del caso de uso, es posible que desee enviarlos al navegador como HTML renderizado, generarlos para la depuración o enviarlos al terminal (si ejecuta una aplicación a través de la línea de comandos).

A continuación se muestran algunos de los métodos y construcciones de lenguaje más utilizados para generar variables:

  • echo - Da salida a una o más cadenas
  • print : genera una cadena y devuelve 1 (siempre)
  • printf : genera una cadena formateada y devuelve la longitud de la cadena generada
  • sprintf - Formatea una cadena y devuelve la cadena formateada
  • print_r - Produce o devuelve el contenido del argumento como una cadena legible para el ser humano
  • var_dump : var_dump información de depuración legible para el ser humano sobre el contenido de los argumentos, incluido su tipo y valor
  • var_export : var_export o devuelve una representación de cadena de la variable como código PHP válido, que se puede usar para recrear el valor.

Nota: Cuando se intenta generar un objeto como una cadena, PHP intentará convertirlo en una cadena (llamando a __toString() - si el objeto tiene tal método). Si no está disponible, un error similar a Object of class [CLASS] could not be converted to string . En este caso, tendrá que inspeccionar el objeto más a fondo, consulte: salida-una-vista-estructurada-de-arreglos-y-objetos .

hacer eco e imprimir

echo e print son construcciones de lenguaje, no funciones. Esto significa que no requieren paréntesis alrededor del argumento como lo hace una función (aunque uno siempre puede agregar paréntesis alrededor de casi cualquier expresión PHP y, por lo tanto, echo("test") tampoco hará ningún daño). Producen la representación de cadena de una variable, constante o expresión. No se pueden utilizar para imprimir matrices u objetos.

  • Asigna la cadena Joel a la variable $name

    $name = "Joel";
    
  • Muestra el valor de $ name usando echo & print

    echo $name;   #> Joel
    print $name;  #> Joel
    
  • Los paréntesis no son necesarios, pero pueden ser utilizados

    echo($name);  #> Joel
    print($name); #> Joel
    
  • Usando múltiples parámetros (solo echo )

    echo $name, "Smith";       #> JoelSmith
    echo($name, " ", "Smith"); #> Joel Smith
    
  • print , a diferencia de echo , es una expresión (devuelve 1 ), y por lo tanto puede usarse en más lugares:

    print("hey") && print(" ") && print("you"); #> you11
    
  • Lo anterior es equivalente a:

    print ("hey" && (print (" " && print "you"))); #> you11
    

Notación abreviada de echo

Cuando está fuera de las etiquetas PHP , una notación abreviada de echo está disponible de forma predeterminada, utilizando <?= Para comenzar la salida y ?> Para finalizarla. Por ejemplo:

<p><?=$variable?></p>    
<p><?= "This is also PHP" ?></p>

Tenga en cuenta que no hay terminación ; . Esto funciona porque la etiqueta PHP de cierre actúa como el terminador de la declaración única. Por lo tanto, es convencional omitir el punto y coma en esta notación abreviada.

Prioridad de print

Si bien la print es lenguaje de construcción tiene prioridad como operador. Se ubica entre = += -= *= **= /= .= %= &= and operadores y ha dejado asociación. Ejemplo:

echo '1' . print '2' + 3; //output 511

Mismo ejemplo con paréntesis:

echo '1' . print ('2' + 3); //output 511

Diferencias entre echo e print

En resumen, hay dos diferencias principales:

  • print solo toma un parámetro, mientras que el echo puede tener múltiples parámetros.
  • print devuelve un valor, por lo que se puede utilizar como una expresión.

Salida de una vista estructurada de arrays y objetos

print_r generará un formato legible por humanos de una matriz u objeto.

Puede tener una variable que sea una matriz u objeto. Intentar emitirlo con un echo arrojará el error:
Notice: Array to string conversion . En su lugar, puede usar la función print_r para volcar un formato legible por humanos de esta variable.

Puede pasar verdadero como segundo parámetro para devolver el contenido como una cadena.

$myobject = new stdClass();
$myobject->myvalue = 'Hello World';
$myarray = [ "Hello", "World" ];
$mystring = "Hello World";
$myint = 42;

// Using print_r we can view the data the array holds.
print_r($myobject);
print_r($myarray);
print_r($mystring);
print_r($myint);

Esto da como resultado lo siguiente:

stdClass Object
(
    [myvalue] => Hello World
)
Array
(
    [0] => Hello
    [1] => World
)
Hello World
42

Además, la salida de print_r se puede capturar como una cadena, en lugar de simplemente hacer eco. Por ejemplo, el siguiente código $myarray versión formateada de $myarray en una nueva variable:

$formatted_array = print_r($myarray, true);

Tenga en cuenta que si está viendo la salida de PHP en un navegador y se interpreta como HTML, los saltos de línea no se mostrarán y la salida será mucho menos legible a menos que haga algo como

echo '<pre>' . print_r($myarray, true) . '</pre>';

Al abrir el código fuente de una página también se formateará su variable de la misma manera sin el uso de la etiqueta <pre> .

Alternativamente, puede decirle al navegador que lo que está generando es texto simple y no HTML:

header('Content-Type: text/plain; charset=utf-8');
print_r($myarray);

var_dump() : genera información de depuración legible para el ser humano sobre el contenido de los argumentos, incluido su tipo y valor

La salida es más detallada en comparación con print_r porque también genera el tipo de la variable junto con su valor y otra información como ID de objeto, tamaños de matriz, longitudes de cadena, marcadores de referencia, etc.

Puede usar var_dump para generar una versión más detallada para la depuración.

var_dump($myobject, $myarray, $mystring, $myint);

La salida es más detallada:

object(stdClass)#12 (1) {
  ["myvalue"]=>
  string(11) "Hello World"
}
array(2) {
  [0]=>
  string(5) "Hello"
  [1]=>
  string(5) "World"
}
string(11) "Hello World"
int(42)

Nota : Si está utilizando xDebug en su entorno de desarrollo, la salida de var_dump está limitada / truncada de forma predeterminada. Consulte la documentación oficial para obtener más información sobre las opciones para cambiar esto.


var_export() - Código PHP salida válido

var_export() vuelca una representación de PHP analizable del elemento.

Puede pasar verdadero como segundo parámetro para devolver el contenido a una variable.

var_export($myarray);
var_export($mystring);
var_export($myint);

La salida es un código PHP válido:

array (
  0 => 'Hello',
  1 => 'World',
)
'Hello World'
42

Para poner el contenido en una variable, puedes hacer esto:

$array_export = var_export($myarray, true);
$string_export = var_export($mystring, true);
$int_export = var_export($myint, 1); // any `Truthy` value

Después de eso, puedes mostrarlo así:

printf('$myarray = %s; %s', $array_export, PHP_EOL);
printf('$mystring = %s; %s', $string_export, PHP_EOL);
printf('$myint = %s; %s', $int_export, PHP_EOL);

Esto producirá la siguiente salida:

$myarray = array (
  0 => 'Hello',
  1 => 'World',
);
$mystring = 'Hello World';
$myint = 42;

printf vs sprintf

printf es la salida una cadena con formato utilizando marcadores de posición

sprintf devolverá la cadena formateada

$name = 'Jeff';

// The `%s` tells PHP to expect a string
//            ↓  `%s` is replaced by  ↓
printf("Hello %s, How's it going?", $name);
#> Hello Jeff, How's it going?

// Instead of outputting it directly, place it into a variable ($greeting)
$greeting = sprintf("Hello %s, How's it going?", $name);
echo $greeting;
#> Hello Jeff, How's it going?

También es posible formatear un número con estas 2 funciones. Esto se puede usar para formatear un valor decimal usado para representar el dinero de modo que siempre tenga 2 dígitos decimales.

$money = 25.2;
printf('%01.2f', $money);
#> 25.20

Las dos funciones vprintf y vsprintf funcionan como printf y sprintf , pero aceptan una cadena de formato y una matriz de valores, en lugar de variables individuales.

Concatenación de cuerdas con eco.

Puede usar la concatenación para unir las cadenas "de extremo a extremo" mientras las emite (con echo o print por ejemplo).

Puedes concatenar variables usando a . (punto / punto).

// String variable
$name = 'Joel';

// Concatenate multiple strings (3 in this example) into one and echo it once done.
//      1. ↓        2. ↓            3. ↓    - Three Individual string items
echo '<p>Hello ' . $name . ', Nice to see you.</p>';
//               ↑       ↑                  - Concatenation Operators

#> "<p>Hello Joel, Nice to see you.</p>"

Similar a la concatenación, el echo (cuando se usa sin paréntesis) se puede usar para combinar cadenas y variables (junto con otras expresiones arbitrarias) usando una coma (,).

$itemCount = 1;

echo 'You have ordered ', $itemCount, ' item', $itemCount === 1 ? '' : 's';
//                      ↑           ↑        ↑                - Note the commas

#> "You have ordered 1 item"

Concatenación de cadenas vs pasar múltiples argumentos a echo

Pasar múltiples argumentos al comando echo es más ventajoso que la concatenación de cadenas en algunas circunstancias. Los argumentos se escriben en la salida en el mismo orden en que se pasan.

echo "The total is: ", $x + $y;

El problema con la concatenación es que el período . Tiene prioridad en la expresión. Si se concatena, la expresión anterior necesita paréntesis adicionales para el comportamiento correcto. La precedencia del período afecta también a los operadores ternarios.

echo "The total is: " . ($x + $y);

Salida de enteros grandes

En sistemas de 32 bits, los enteros más grandes que PHP_INT_MAX se convierten automáticamente a flotar. La salida de estos como valores enteros (es decir, notación no científica) se puede hacer con printf , utilizando la representación float , como se ilustra a continuación:

foreach ([1, 2, 3, 4, 5, 6, 9, 12] as $p) {
    $i = pow(1024, $p);
    printf("pow(1024, %d) > (%7s) %20s %38.0F", $p, gettype($i), $i, $i);
    echo "  ", $i, "\n";
}
// outputs:
pow(1024,  1)  integer                 1024                                   1024  1024
pow(1024,  2)  integer              1048576                                1048576  1048576
pow(1024,  3)  integer           1073741824                             1073741824  1073741824
pow(1024,  4)   double        1099511627776                          1099511627776  1099511627776
pow(1024,  5)   double  1.1258999068426E+15                       1125899906842624  1.1258999068426E+15
pow(1024,  6)   double  1.1529215046068E+18                    1152921504606846976  1.1529215046068E+18
pow(1024,  9)   double  1.2379400392854E+27           1237940039285380274899124224  1.2379400392854E+27
pow(1024, 12)   double  1.3292279957849E+36  1329227995784915872903807060280344576  1.3292279957849E+36

Nota: ¡cuidado con la precisión de flotación, que no es infinita!

Si bien esto se ve bien, en este ejemplo artificial, todos los números se pueden representar como un número binario, ya que todos son potencias de 1024 (y, por lo tanto, 2). Ver por ejemplo:

$n = pow(10, 27);
printf("%s %.0F\n", $n, $n);
// 1.0E+27 1000000000000000013287555072

Genere una matriz multidimensional con índice y valor e imprima en la tabla

Array 
( 
    [0] => Array 
        ( 
            [id] => 13 
            [category_id] => 7 
            [name] => Leaving Of Liverpool 
            [description] => Leaving Of Liverpool 
            [price] => 1.00 
            [virtual] => 1 
            [active] => 1 
            [sort_order] => 13 
            [created] => 2007-06-24 14:08:03 
            [modified] => 2007-06-24 14:08:03 
            [image] => NONE 
        ) 

    [1] => Array 
        ( 
            [id] => 16 
            [category_id] => 7 
            [name] => Yellow Submarine 
            [description] => Yellow Submarine 
            [price] => 1.00 
            [virtual] => 1 
            [active] => 1 
            [sort_order] => 16 
            [created] => 2007-06-24 14:10:02 
            [modified] => 2007-06-24 14:10:02 
            [image] => NONE 
        ) 

)  

Matriz multidimensional de salida con índice y valor en tabla

<table>
<?php 
foreach ($products as $key => $value) {
    foreach ($value as $k => $v) {
        echo "<tr>";
        echo "<td>$k</td>"; // Get index.
        echo "<td>$v</td>"; // Get value.
        echo "</tr>";
    }
}
?>
</table>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow