PHP
Ange värdet på en variabel
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 returnerar1
(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 liknarObject 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
ochprint
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ånecho
, är ett uttryck (det returnerar1
), 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, medanecho
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()
- Mata ut matriser och objekt för felsökning
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>