Zoeken…


Invoering

Om een dynamisch en interactief PHP-programma te bouwen, is het handig om variabelen en hun waarden uit te voeren. De PHP-taal zorgt voor meerdere methoden voor waarde-uitvoer. Dit onderwerp behandelt de standaardmethoden voor het afdrukken van een waarde in PHP en waar deze methoden kunnen worden gebruikt.

Opmerkingen

Variabelen in PHP zijn er in verschillende soorten. Afhankelijk van het gebruik, wilt u ze mogelijk als gerenderde HTML naar de browser uitvoeren, uitvoeren voor foutopsporing of uitvoeren naar de terminal (als u een toepassing uitvoert via de opdrachtregel).

Hieronder staan enkele van de meest gebruikte methoden en taalconstructies om variabelen uit te voeren:

  • echo - Voert een of meer strings uit
  • print - Voert een string uit en retourneert 1 (altijd)
  • printf - Voert een opgemaakte string uit en geeft de lengte van de uitgevoerde string terug
  • sprintf - Formatteert een string en geeft de opgemaakte string terug
  • print_r - Voert de inhoud van het argument uit of geeft deze terug als een voor mensen leesbare string
  • var_dump - Voert door mensen leesbare foutopsporingsinformatie uit over de inhoud van het argument (en), inclusief het type en de waarde
  • var_export - var_export als resultaat een var_export van de variabele als geldige PHP-code, die kan worden gebruikt om de waarde opnieuw te creëren.

Opmerking: Wanneer u probeert een object als een string uit te voeren, zal PHP proberen het in een string te converteren (door __toString() aan te roepen - als het object een dergelijke methode heeft). Indien niet beschikbaar, kan een fout vergelijkbaar met Object of class [CLASS] could not be converted to string . In dit geval moet u het object verder inspecteren, zie: uitvoeren van een gestructureerde weergave van arrays-en-objecten .

echo en print

echo en print zijn taalconstructies, geen functies. Dit betekent dat ze geen haakjes nodig hebben rond het argument zoals een functie doet (hoewel je altijd haakjes kunt toevoegen rond bijna elke PHP-expressie en dus echo("test") ook geen kwaad kan). Ze geven de stringvoorstelling van een variabele, constante of uitdrukking weer. Ze kunnen niet worden gebruikt om arrays of objecten af te drukken.

  • Wijs de string Joel aan de variabele $name

    $name = "Joel";
    
  • Voer de waarde van $ name uit met echo & print

    echo $name;   #> Joel
    print $name;  #> Joel
    
  • Haakjes zijn niet verplicht, maar kunnen worden gebruikt

    echo($name);  #> Joel
    print($name); #> Joel
    
  • Meerdere parameters gebruiken (alleen echo )

    echo $name, "Smith";       #> JoelSmith
    echo($name, " ", "Smith"); #> Joel Smith
    
  • print , anders dan echo , een expressie (geeft 1 terug) en kan dus op meer plaatsen worden gebruikt:

    print("hey") && print(" ") && print("you"); #> you11
    
  • Het bovenstaande komt overeen met:

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

Steno-notatie voor echo

Buiten PHP-tags is standaard een korte notatie voor echo beschikbaar, waarbij <?= om de uitvoer te starten en ?> te beëindigen. Bijvoorbeeld:

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

Merk op dat er geen beëindiging is ; . Dit werkt omdat de afsluitende PHP-tag fungeert als de terminator voor de enkele instructie. Het is dus gebruikelijk om de puntkomma weg te laten in deze steno-notatie.

Prioriteit van print

Hoewel de print taalconstructie is, heeft deze prioriteit als operator. Het plaatst tussen = += -= *= **= /= .= %= &= En and operatoren en heeft de associatie verlaten. Voorbeeld:

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

Hetzelfde voorbeeld met haakjes:

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

Verschillen tussen echo en print

Kortom, er zijn twee belangrijke verschillen:

  • print slechts één parameter nodig, terwijl echo meerdere parameters kan hebben.
  • print geeft een waarde terug, kan dus als uitdrukking worden gebruikt.

Een gestructureerd beeld van arrays en objecten uitvoeren

print_r zal een voor mensen leesbaar formaat van een array of object uitvoeren.

Mogelijk hebt u een variabele die een array of object is. Als u het probeert uit te voeren met een echo wordt de fout gegenereerd:
Notice: Array to string conversion . U kunt in plaats daarvan de functie print_r om een voor mensen leesbaar formaat van deze variabele te dumpen.

U kunt true doorgeven als de tweede parameter om de inhoud als een tekenreeks te retourneren.

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

Dit levert het volgende op:

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

Verder kan de uitvoer van print_r worden vastgelegd als een string in plaats van eenvoudigweg te worden herhaald. De volgende code dumpt bijvoorbeeld de opgemaakte versie van $myarray in een nieuwe variabele:

$formatted_array = print_r($myarray, true);

Merk op dat als je de uitvoer van PHP in een browser bekijkt en het wordt geïnterpreteerd als HTML, de regeleinden niet worden weergegeven en de uitvoer veel minder leesbaar is, tenzij je zoiets doet

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

Als u de broncode van een pagina opent, wordt uw variabele ook op dezelfde manier opgemaakt zonder de tag <pre> gebruiken.

Als alternatief kunt u de browser vertellen dat wat u uitvoert, platte tekst is en geen HTML:

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

var_dump() - Geef door mensen leesbare foutopsporingsinformatie over de inhoud van de argument (en) inclusief het type en de waarde

De uitvoer is gedetailleerder in vergelijking met print_r omdat deze ook het type van de variabele samen met zijn waarde en andere informatie zoals object-ID's, matrixgroottes, stringlengtes, referentiemarkeringen, enz. Uitvoert.

U kunt var_dump om een meer gedetailleerde versie voor foutopsporing uit te voeren.

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

De uitvoer is gedetailleerder:

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)

Opmerking : als u xDebug in uw ontwikkelomgeving gebruikt, is de uitvoer van var_dump standaard beperkt / afgekapt. Raadpleeg de officiële documentatie voor meer informatie over de opties om dit te wijzigen.


var_export() - var_export() geldige PHP code uit

var_export() dumpt een PHP parseerbare weergave van het item.

U kunt true doorgeven als de tweede parameter om de inhoud terug te brengen naar een variabele.

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

Uitvoer is geldige PHP-code:

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

Om de inhoud in een variabele te plaatsen, kunt u dit doen:

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

Daarna kunt u het als volgt uitvoeren:

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

Dit levert de volgende uitvoer op:

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

printf vs sprintf

printf zal de uitgang van een geformatteerde string met behulp van plaatsaanduidingen

sprintf retourneert de opgemaakte string

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

Het is ook mogelijk om een nummer te formatteren met deze 2 functies. Dit kan worden gebruikt om een decimale waarde op te maken die wordt gebruikt om geld weer te geven, zodat deze altijd 2 decimale cijfers heeft.

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

De twee functies vprintf en vsprintf werken als printf en sprintf , maar accepteren een vsprintf en een reeks waarden, in plaats van individuele variabelen.

String aaneenschakeling met echo

U kunt aaneenschakeling gebruiken om strings "end-to-end" samen te voegen terwijl ze worden uitgevoerd (bijvoorbeeld met echo of print ).

U kunt variabelen samenvoegen met een . (Periode / dot).

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

Net als aaneenschakeling kan echo (indien gebruikt zonder haakjes) worden gebruikt om tekenreeksen en variabelen samen te combineren (samen met andere willekeurige expressies) met een komma (,).

$itemCount = 1;

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

#> "You have ordered 1 item"

String-aaneenschakeling versus meerdere argumenten doorgeven aan echo

Het doorgeven van meerdere argumenten aan het echo-commando is in sommige omstandigheden voordeliger dan het samenvoegen van tekenreeksen. De argumenten worden naar de uitvoer geschreven in dezelfde volgorde waarin ze worden doorgegeven.

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

Het probleem met de aaneenschakeling is dat de periode . heeft voorrang in de uitdrukking. Indien aaneengeschakeld, heeft de bovenstaande uitdrukking extra haakjes nodig voor het juiste gedrag. De voorrang van de periode is ook van invloed op ternaire operatoren.

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

Grote gehele getallen uitvoeren

Op 32-bits systemen worden gehele getallen groter dan PHP_INT_MAX automatisch geconverteerd naar zwevend. Het uitvoeren van deze waarden als gehele getallen (dwz niet-wetenschappelijke notatie) kan worden gedaan met printf , met behulp van de float weergave, zoals hieronder geïllustreerd:

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

Opmerking: pas op voor float-precisie, die niet oneindig is!

Hoewel dit er leuk uitziet, kunnen in dit gekunstelde voorbeeld de nummers allemaal worden weergegeven als een binair getal, omdat ze allemaal bevoegdheden van 1024 zijn (en dus 2). Zie bijvoorbeeld:

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

Voer een multidimensionale array met index en waarde uit en druk af in de tabel

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 
        ) 

)  

Multidimensionale array uitvoeren met index en waarde in tabel

<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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow