Sök…


Introduktion

För att bygga ett dynamiskt och interaktivt PHP-program är det användbart att mata ut variabler och deras värden. PHP-språket möjliggör flera metoder för värdeutgång. Detta ämne täcker standardmetoderna för att skriva ut ett värde i PHP och där dessa metoder kan användas.

Anmärkningar

Variabler i PHP finns i en mängd olika typer. Beroende på användningsfallet kanske du vill skicka dem ut till webbläsaren som återgivna HTML, mata ut dem för felsökning eller mata ut dem till terminalen (om du kör ett program via kommandoraden).

Nedan följer några av de mest använda metoderna och språkkonstruktionerna för att mata ut variabler:

  • echo - matar ut en eller flera strängar
  • print - matar ut en sträng och returnerar 1 (alltid)
  • printf - Matar ut en formaterad sträng och returnerar längden på den utmatade strängen
  • sprintf - Formaterar en sträng och returnerar den formaterade strängen
  • print_r - Matar ut eller returnerar innehållet i argumentet som en mänsklig läsbar sträng
  • var_dump - var_dump information som kan läsas om felsökning om innehållet i argumentet, inklusive dess typ och värde
  • var_export - matar ut eller returnerar en strängvisning av variabeln som giltig PHP-kod, som kan användas för att återskapa värdet.

Obs: När du försöker att mata ut ett objekt som en sträng, kommer PHP att försöka konvertera det till en sträng (genom att ringa __toString() - om objektet har en sådan metod). Om det inte är tillgängligt kan ett fel som liknar Object of class [CLASS] could not be converted to string visas. I det här fallet måste du inspektera objektet ytterligare, se: mata ut-en-strukturerad-visa-av-arrays-och-objekt .

eko och tryck

echo och print är språkkonstruktioner, inte funktioner. Detta innebär att de inte kräver parenteser runt argumentet som en funktion gör (även om man alltid kan lägga till parenteser runt nästan vilket PHP-uttryck som helst och att echo("test") inte heller gör någon skada). De matar ut strängrepresentationen av en variabel, konstant eller uttryck. De kan inte användas för att skriva ut matriser eller objekt.

  • Tilldela strängen Joel till variabeln $name

    $name = "Joel";
    
  • Skriv ut värdet på $ name med echo och print

    echo $name;   #> Joel
    print $name;  #> Joel
    
  • Parenteser krävs inte, men kan användas

    echo($name);  #> Joel
    print($name); #> Joel
    
  • Använda flera parametrar (endast echo )

    echo $name, "Smith";       #> JoelSmith
    echo($name, " ", "Smith"); #> Joel Smith
    
  • print , till skillnad från echo , är ett uttryck (det returnerar 1 ), och kan därför användas på fler platser:

    print("hey") && print(" ") && print("you"); #> you11
    
  • Ovanstående motsvarar:

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

Kortfattad notation för echo

När du är utanför PHP-taggar är en kortfattad notation för echo tillgänglig som standard med <?= att starta utdata och ?> att avsluta den. Till exempel:

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

Observera att det inte avslutas ; . Detta fungerar eftersom den stängande PHP-taggen fungerar som terminator för det enda uttalandet. Så det är vanligt att utelämna semikolon i denna korta notation.

Prioritet för print

Även om print är språkkonstruktion har den prioritet som operatör. Det placerar mellan = += -= *= **= /= .= %= &= Och and operatörer och har lämnat associering. Exempel:

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

Samma exempel med parenteser:

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

Skillnader mellan echo och print

Kort sagt, det finns två huvudskillnader:

  • print tar bara en parameter, medan echo kan ha flera parametrar.
  • print ger ett värde, så det kan användas som ett uttryck.

Visar en strukturerad vy över matriser och objekt

print_r kommer att mata ut ett mänskligt läsbart format för en matris eller objekt.

Du kan ha en variabel som är en matris eller ett objekt. Att försöka skriva ut det med ett echo kommer att kasta felet:
Notice: Array to string conversion . Du kan istället använda funktionen print_r att dumpa ett mänskligt läsbart format för denna variabel.

Du kan passera true som den andra parametern för att returnera innehållet som en sträng.

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

Detta matar ut följande:

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

Vidare kan utskriften från print_r fångas som en sträng, snarare än att bara återkalla. Till exempel kommer följande kod att dumpa den formaterade versionen av $myarray till en ny variabel:

$formatted_array = print_r($myarray, true);

Observera att om du tittar på PHP-utgången i en webbläsare, och den tolkas som HTML, kommer raderna inte att visas och utgången blir mycket mindre läsbar om du inte gör något liknande

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

Om du öppnar källkoden på en sida kommer du att formatera din variabel på samma sätt utan att använda <pre> -taggen.

Alternativt kan du berätta för webbläsaren att det du matar ut är ren text och inte HTML:

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

var_dump() - Mata ut information om mänsklig läsbar felsökning om innehållet i argumentet inklusive dess typ och värde

Utsignalen är mer detaljerat som jämfört med print_r eftersom det matar också den typ av variabeln tillsammans med dess värde och annan information som objekt ID, array storlekar stränglängder, referensmarkörer, etc.

Du kan använda var_dump att mata ut en mer detaljerad version för felsökning.

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

Utmatningen är mer detaljerad:

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)

Obs : Om du använder xDebug i din utvecklingsmiljö, är utgången från var_dump begränsad / trunkerad som standard. Se den officiella dokumentationen för mer information om alternativen för att ändra detta.


var_export() - Output giltig PHP kod

var_export() dumpar en PHP delbar representation av objektet.

Du kan passera true som den andra parametern för att returnera innehållet till en variabel.

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

Utgången är giltig PHP-kod:

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

För att sätta innehållet i en variabel kan du göra detta:

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

Efter det kan du skriva ut det så här:

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

Detta ger följande utgång:

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

printf vs sprintf

printf kommer att mata ut en formaterad sträng med platshållare

sprintf returnerar den formaterade strängen

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

Det är också möjligt att formatera ett nummer med dessa två funktioner. Detta kan användas för att formatera ett decimalvärde som används för att representera pengar så att det alltid har två decimaler.

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

De två funktionerna vprintf och vsprintf fungerar som printf och sprintf , men accepterar en formatsträng och en mängd värden istället för enskilda variabler.

Strängen sammankoppling med eko

Du kan använda sammanlänkning för att ansluta strängar "slutet till slut" medan du matar ut dem (med echo eller print till exempel).

Du kan sammanfoga variabler med a . (Perioden / prick).

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

I likhet med sammankoppling kan echo (när det används utan parenteser) användas för att kombinera strängar och variabler tillsammans (tillsammans med andra godtyckliga uttryck) med hjälp av ett komma (,).

$itemCount = 1;

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

#> "You have ordered 1 item"

Strängen sammanlänkning vs överför flera argument till eko

Att överföra flera argument till eko-kommandot är mer fördelaktigt än strängen sammankoppling under vissa omständigheter. Argumenten skrivs till utgången i samma ordning som de skickas in.

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

Problemet med sammankopplingen är att perioden . har företräde i uttrycket. Om det är sammankopplat behöver uttrycket ovan extra parenteser för rätt beteende. Periodens företräde påverkar också ternära operatörer.

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

Skickar ut stora heltal

På 32-bitars-system konverteras heltal större än PHP_INT_MAX automatiskt till float. Att mata ut dessa som heltal (dvs. icke-vetenskaplig notation) kan göras med printf hjälp av float , som illustreras nedan:

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

Obs: se upp för flottörprecision, som inte är oändlig!

Även om detta ser trevligt ut, kan i detta förfalskade exempel alla siffrorna representeras som ett binärt tal eftersom de alla är krafterna för 1024 (och därmed 2). Se till exempel:

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

Skriv ut en flerdimensionell matris med index och värde och skriv ut i tabellen

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 
        ) 

)  

Utmatning flerdimensionell matris med index och värde i tabellen

<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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow