PHP
変数の値を出力する
サーチ…
前書き
動的でインタラクティブなPHPプログラムを構築するには、変数とその値を出力すると便利です。 PHP言語は、複数の値出力方法を可能にします。このトピックでは、PHPで値を表示する標準的な方法と、これらのメソッドを使用できる場所について説明します。
備考
PHPの変数にはさまざまな種類があります。ユースケースによっては、HTMLにレンダリングしてブラウザに出力したり、デバッグ用に出力したり、コマンドラインでアプリケーションを実行している場合は端末に出力することができます。
以下に、変数を出力するために最も一般的に使用されるメソッドと言語構造のいくつかを示します。
-
echo
- 1つ以上の文字列を出力する -
print
- 文字列を出力し、1
(常に)を返します。 -
printf
- 書式設定された文字列を出力し、出力された文字列の長さを返します -
sprintf
- 文字列をフォーマットし、フォーマットされた文字列を返す -
print_r
- 引数の内容を人間が読める文字列として出力するか返す -
var_dump
- タイプと値を含む引数の内容に関する人間が読めるデバッグ情報を出力する -
var_export
- 変数の文字列レンダリングを有効なPHPコードとして出力または返す。これを使用して値を再作成することができる。
注意:オブジェクトを文字列として出力しようとすると、PHPは文字列に変換しようとします(オブジェクトにそのようなメソッドがある場合は、
__toString()
呼び出すことによって)。使用できない場合、Object of class [CLASS] could not be converted to string
似たエラーObject of class [CLASS] could not be converted to string
。この場合は、オブジェクトをさらに検査する必要があります。 出力 - 構造化ビューの配列とオブジェクトを参照してください。
エコーとプリント
echo
とprint
は、関数ではなく言語の構造体です。これは、関数のように引数のまわりに括弧を必要としないことを意味します(ただしほとんどのPHP式のまわりに括弧をつけてecho("test")
でも害はありません)。変数、定数、または式の文字列表現を出力します。配列やオブジェクトの印刷には使用できません。
変数
$name
文字列Joel
を代入する$name = "Joel";
echo
&print
を使って$ nameの値を出力するecho $name; #> Joel print $name; #> Joel
括弧は必須ではありませんが、使用することができます
echo($name); #> Joel print($name); #> Joel
複数のパラメータを使用する(
echo
のみ)echo $name, "Smith"; #> JoelSmith echo($name, " ", "Smith"); #> Joel Smith
print
はecho
とは異なり、式(1
返します)であるため、より多くの場所で使用できます。print("hey") && print(" ") && print("you"); #> you11
上記は次のものと同じです:
print ("hey" && (print (" " && print "you"))); #> you11
echo
簡略表記
PHPタグの外側では、デフォルトでは<?=
を使って出力を開始し、 ?>
を使って終了するように、 echo
簡略表記が利用可能です。例えば:
<p><?=$variable?></p>
<p><?= "This is also PHP" ?></p>
終了しないことに注意してください;
。これは、終了するPHPタグが単一のステートメントの終結文字として機能するために機能します。したがって、この短縮形表記ではセミコロンを省略するのが一般的です。
print
優先順位
print
は言語の構成ですが、オペレータのような優先順位があります。 =
+=
-=
*=
**=
/=
.=
%=
&=
and
演算子との間に置かれ、関連付けが解除されました。例:
echo '1' . print '2' + 3; //output 511
角括弧付きの同じ例:
echo '1' . print ('2' + 3); //output 511
echo
とprint
違い
要するに、主に2つの違いがあります。
-
print
は1つのパラメータしか指定できませんが、echo
は複数のパラメータがあります。 -
print
は値を返すので、式として使用できます。
配列とオブジェクトの構造化ビューの出力
print_r()
- デバッグ用の 配列とオブジェクトの出力
print_r
は人間が読める形式の配列またはオブジェクトを出力します。
配列やオブジェクトである変数があるかもしれません。 echo
出力しようとすると、エラーがスローされます:
Notice: Array to string conversion
。代わりにprint_r
関数を使用して、この変数の人間が読める形式をダンプすることができます。
2番目のパラメータとしてtrueを渡して、コンテンツを文字列として返すことができます。
$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);
これにより、以下が出力されます。
stdClass Object
(
[myvalue] => Hello World
)
Array
(
[0] => Hello
[1] => World
)
Hello World
42
さらに、 print_r
からの出力は、単純にエコーされるのではなく、文字列として取り込むことができます。たとえば、次のコードは、 $myarray
書式設定されたバージョンを新しい変数にダンプします。
$formatted_array = print_r($myarray, true);
ブラウザでPHPの出力を表示していてHTMLとして解釈されている場合、改行は表示されず、出力が表示されなくなります
echo '<pre>' . print_r($myarray, true) . '</pre>';
ページのソースコードを開くと、
<pre>
タグを使用せずに同じ方法で変数をフォーマットします。
代わりに、出力しているものがHTMLではなくプレーンテキストであることをブラウザに伝えることができます:
header('Content-Type: text/plain; charset=utf-8');
print_r($myarray);
var_dump()
- タイプと値を含む引数の内容に関する人間が読めるデバッグ情報を出力する
出力は、より詳細で比較するprint_r
それはまた、オブジェクトID、アレイサイズ、文字列長、基準マーカ、等のような、その値と他の情報と一緒に変数の型を出力するため
var_dump
を使用して、デバッグ用のより詳細なバージョンを出力することができます。
var_dump($myobject, $myarray, $mystring, $myint);
出力はより詳細です:
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)
注意 :開発環境でxDebugを使用している場合、デフォルトではvar_dumpの出力は制限/切り捨てられます。これを変更するオプションの詳細については、 公式ドキュメントを参照してください。
var_export()
- 有効なPHP
コードを出力する
var_export()
は、その項目のPHP
解析可能な表現をダンプします。
2番目のパラメータとしてtrueを渡して、内容を変数に戻すことができます。
var_export($myarray);
var_export($mystring);
var_export($myint);
出力は有効なPHPコードです:
array (
0 => 'Hello',
1 => 'World',
)
'Hello World'
42
コンテンツを変数に入れるには、次のようにします。
$array_export = var_export($myarray, true);
$string_export = var_export($mystring, true);
$int_export = var_export($myint, 1); // any `Truthy` value
その後、次のように出力することができます:
printf('$myarray = %s; %s', $array_export, PHP_EOL);
printf('$mystring = %s; %s', $string_export, PHP_EOL);
printf('$myint = %s; %s', $int_export, PHP_EOL);
これにより、次の出力が生成されます。
$myarray = array (
0 => 'Hello',
1 => 'World',
);
$mystring = 'Hello World';
$myint = 42;
printfとsprintf
printf
はプレースホルダを使用して書式設定された文字列を出力します
sprintf
はフォーマットされた文字列を返します
$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?
これらの2つの関数で数値をフォーマットすることもできます。これは、常に2桁の10進数を持つように、貨幣を表すために使用される10進値をフォーマットするために使用できます。
$money = 25.2;
printf('%01.2f', $money);
#> 25.20
vprintf
とvsprintf
の2つの関数はprintf
とsprintf
として動作しますが、個々の変数の代わりに書式文字列と値の配列を受け入れます。
エコーとの文字列連結
連結を使用して、文字列を出力する際に「終わりから終わりまで」( echo
やprint
など)を結合することができます。
変数を連結するには、を使用し.
(ピリオド/ドット)。
// 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>"
連結と同様に、 echo
(括弧なしで使用する場合)を使用して、コンマ(、)を使用して文字列と変数を(他の任意の式と一緒に)結合することができます。
$itemCount = 1;
echo 'You have ordered ', $itemCount, ' item', $itemCount === 1 ? '' : 's';
// ↑ ↑ ↑ - Note the commas
#> "You have ordered 1 item"
文字列連結と複数の引数を渡してエコーする
echoコマンドに複数の引数を渡すことは、状況によっては文字列連結よりも有利です。引数は、渡されたのと同じ順序で出力に書き込まれます。
echo "The total is: ", $x + $y;
連結の問題はその期間.
式で優先されます。連結した場合、上記の式は正しい動作のために余分なカッコを必要とします。この期間の優先順位は、三項演算子にも影響します。
echo "The total is: " . ($x + $y);
大きな整数を出力する
32ビットシステムでは、 PHP_INT_MAX
より大きい整数は自動的にfloatに変換されます。これらを整数値として出力する(すなわち非科学的表記法)は、以下に示すように、 float
表現を使用してprintf
を使って行うことができます。
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
注:無限ではない浮動小数点精度に注意してください!
これはうまく見えますが、この考案された例では、数字はすべて1024(したがって2)の累乗であるため、すべて2進数で表すことができます。たとえば、次を参照してください。
$n = pow(10, 27);
printf("%s %.0F\n", $n, $n);
// 1.0E+27 1000000000000000013287555072
インデックスと値を持つ多次元配列を出力し、テーブルに出力する
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
)
)
表のインデックスと値を持つ多次元出力配列の出力
<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>