Recherche…


Introduction

Pour construire un programme PHP dynamique et interactif, il est utile de générer des variables et leurs valeurs. Le langage PHP permet plusieurs méthodes de sortie de valeur. Cette rubrique couvre les méthodes standard d’impression d’une valeur en PHP et où ces méthodes peuvent être utilisées.

Remarques

Les variables en PHP sont de types variés. Selon le cas d'utilisation, vous souhaiterez peut-être les envoyer au navigateur en tant que HTML rendu, les sortir pour le déboguer ou les envoyer au terminal (si vous exécutez une application via la ligne de commande).

Vous trouverez ci-dessous certaines des méthodes et constructions de langage les plus couramment utilisées pour générer des variables:

  • echo - Affiche une ou plusieurs chaînes
  • print - Affiche une chaîne et renvoie 1 (toujours)
  • printf - Affiche une chaîne formatée et renvoie la longueur de la chaîne sortie
  • sprintf - Formate une chaîne et retourne la chaîne formatée
  • print_r - Affiche ou retourne le contenu de l'argument en tant que chaîne lisible par l'homme
  • var_dump - Affiche des informations de débogage lisibles par l'homme sur le contenu du ou des arguments, y compris son type et sa valeur
  • var_export - Affiche ou renvoie un rendu de chaîne de la variable sous forme de code PHP valide, qui peut être utilisé pour recréer la valeur.

Note: Lorsque vous essayez de sortir un objet sous forme de chaîne, PHP essaiera de le convertir en chaîne (en appelant __toString() - si l’objet possède une telle méthode). Si elle n'est pas disponible, une erreur similaire à Object of class [CLASS] could not be converted to string . Dans ce cas, vous devrez inspecter l'objet davantage, voir: sortie d'une vue structurée des tableaux et des objets .

écho et impression

echo et print sont des constructions de langage, pas de fonctions. Cela signifie qu'ils n'ont pas besoin de parenthèses autour de l'argument, comme une fonction (bien que l'on puisse toujours ajouter des parenthèses autour de n'importe quelle expression PHP et que echo("test") ne fasse pas de mal non plus. Ils affichent la représentation sous forme de chaîne d'une variable, d'une constante ou d'une expression. Ils ne peuvent pas être utilisés pour imprimer des tableaux ou des objets.

  • Assignez la chaîne Joel à la variable $name

    $name = "Joel";
    
  • Affiche la valeur de $ name en utilisant echo & print

    echo $name;   #> Joel
    print $name;  #> Joel
    
  • Les parenthèses ne sont pas obligatoires, mais peuvent être utilisées

    echo($name);  #> Joel
    print($name); #> Joel
    
  • Utilisation de plusieurs paramètres (uniquement echo )

    echo $name, "Smith";       #> JoelSmith
    echo($name, " ", "Smith"); #> Joel Smith
    
  • print , contrairement à echo , est une expression (il retourne 1 ), et peut donc être utilisé dans plus d'endroits:

    print("hey") && print(" ") && print("you"); #> you11
    
  • Ce qui précède est équivalent à:

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

Notation abrégée pour echo

En dehors des balises PHP , une notation abrégée pour echo est disponible par défaut, utilisant <?= Pour commencer la sortie et ?> Pour la terminer. Par exemple:

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

Notez qu'il n'y a pas de terminaison ; . Cela fonctionne parce que la balise PHP de fermeture agit comme le terminateur de la seule instruction. Donc, il est classique d'omettre le point-virgule dans cette notation abrégée.

Priorité d' print

Bien que l’ print soit la construction du langage, elle a la priorité comme opérateur. Il place entre = += -= *= **= /= .= %= &= Et and opérateurs et a quitté l'association. Exemple:

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

Même exemple avec des parenthèses:

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

Différences entre echo et print

En bref, il y a deux différences principales:

  • print ne prend qu'un paramètre, alors que l' echo peut avoir plusieurs paramètres.
  • print renvoie une valeur et peut donc être utilisée comme expression.

Sortie d'une vue structurée de tableaux et d'objets

print_r affichera un format lisible par l'homme d'un tableau ou d'un objet.

Vous pouvez avoir une variable qui est un tableau ou un objet. Essayer de le sortir avec un echo lancera l'erreur:
Notice: Array to string conversion . Vous pouvez plutôt utiliser la fonction print_r pour vider un format lisible par l'homme de cette variable.

Vous pouvez transmettre true comme second paramètre pour renvoyer le contenu sous forme de chaîne.

$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);

Cela génère les éléments suivants:

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

De plus, la sortie de print_r peut être capturée sous forme de chaîne, plutôt que simplement renvoyée. Par exemple, le code suivant $myarray version formatée de $myarray dans une nouvelle variable:

$formatted_array = print_r($myarray, true);

Notez que si vous visualisez la sortie de PHP dans un navigateur, et que celle-ci est interprétée en HTML, les sauts de ligne ne seront pas affichés et la sortie sera beaucoup moins lisible à moins que vous ne fassiez quelque chose comme:

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

L'ouverture du code source d'une page formatera également votre variable de la même manière sans utiliser la <pre> .

Sinon, vous pouvez dire au navigateur que ce que vous produisez est du texte brut, et non du HTML:

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

var_dump() - var_dump() des informations de débogage lisibles par l'homme sur le contenu des arguments, y compris son type et sa valeur

La sortie est plus détaillée par rapport à print_r car elle print_r également le type de la variable avec sa valeur et d'autres informations telles que les ID d'objet, les tailles de tableau, les longueurs de chaîne, les marqueurs de référence, etc.

Vous pouvez utiliser var_dump pour générer une version plus détaillée du débogage.

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

La sortie est plus détaillée:

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)

Remarque : Si vous utilisez xDebug dans votre environnement de développement, la sortie de var_dump est limitée / tronquée par défaut. Voir la documentation officielle pour plus d'informations sur les options pour changer cela.


var_export() - var_export() un code PHP valide

var_export() une représentation var_export() PHP de l'élément.

Vous pouvez transmettre true comme second paramètre pour renvoyer le contenu dans une variable.

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

La sortie est un code PHP valide:

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

Pour mettre le contenu dans une variable, vous pouvez le faire:

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

Après cela, vous pouvez le sortir comme ceci:

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

Cela produira la sortie suivante:

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

printf vs sprintf

printf affichera une chaîne formatée à l'aide d'espaces réservés

sprintf retournera la chaîne formatée

$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?

Il est également possible de formater un numéro avec ces 2 fonctions. Cela peut être utilisé pour formater une valeur décimale utilisée pour représenter de l'argent afin qu'il comporte toujours 2 chiffres décimaux.

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

Les deux fonctions vprintf et vsprintf fonctionnent comme printf et sprintf , mais acceptent une chaîne de format et un tableau de valeurs, au lieu de variables individuelles.

Concaténation de chaînes avec écho

Vous pouvez utiliser la concaténation pour joindre des chaînes "bout à bout" lors de leur sortie (avec echo ou print par exemple).

Vous pouvez concaténer des variables en utilisant a . (point / point).

// 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>"

Semblable à la concaténation, echo (utilisé sans parenthèses) peut être utilisé pour combiner des chaînes et des variables (avec d'autres expressions arbitraires) en utilisant une virgule (,).

$itemCount = 1;

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

#> "You have ordered 1 item"

Concaténation de chaînes vs transmission de plusieurs arguments à echo

Transmettre plusieurs arguments à la commande echo est plus avantageux que la concaténation de chaînes dans certaines circonstances. Les arguments sont écrits dans la sortie dans le même ordre qu'ils ont été transmis.

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

Le problème avec la concaténation est que la période . a priorité dans l'expression. Si concaténé, l'expression ci-dessus nécessite des parenthèses supplémentaires pour le comportement correct. La priorité de la période affecte également les opérateurs ternaires.

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

Sortie de grands nombres entiers

Sur les systèmes 32 bits, les entiers supérieurs à PHP_INT_MAX sont automatiquement convertis en PHP_INT_MAX flottantes. Les afficher sous forme de valeurs entières (c.-à-d. Notation non scientifique) peut être fait avec printf , en utilisant la représentation float , comme illustré ci-dessous:

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

Remarque: attention à la précision du flottant, qui n'est pas infinie!

Bien que cela semble bien, dans cet exemple artificiel, les nombres peuvent tous être représentés par un nombre binaire, car ils sont tous des puissances de 1024 (et donc 2). Voir par exemple:

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

Générer un tableau multidimensionnel avec index et valeur et imprimer dans la table

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 
        ) 

)  

Tableau multidimensionnel en sortie avec index et valeur dans le tableau

<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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow