サーチ…


前書き

動的でインタラクティブな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 。この場合は、オブジェクトをさらに検査する必要があります。 出力 - 構造化ビューの配列とオブジェクトを参照してください。

エコーとプリント

echoprintは、関数ではなく言語の構造体です。これは、関数のように引数のまわりに括弧を必要としないことを意味します(ただしほとんどのPHP式のまわりに括弧をつけてecho("test")でも害はありません)。変数、定数、または式の文字列表現を出力します。配列やオブジェクトの印刷には使用できません。

  • 変数$name文字列Joelを代入する

    $name = "Joel";
    
  • echoprintを使って$ nameの値を出力する

    echo $name;   #> Joel
    print $name;  #> Joel
    
  • 括弧は必須ではありませんが、使用することができます

    echo($name);  #> Joel
    print($name); #> Joel
    
  • 複数のパラメータを使用する( echoのみ)

    echo $name, "Smith";       #> JoelSmith
    echo($name, " ", "Smith"); #> Joel Smith
    
  • printechoとは異なり、式( 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は言語の構成ですが、オペレータのような優先順位があります。 = += -= *= **= /= .= %= &= and演算子との間に置かれ、関連付けが解除されました。例:

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

角括弧付きの同じ例:

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

echoprint違い

要するに、主に2つの違いがあります。

  • printは1つのパラメータしか指定できませんが、 echoは複数のパラメータがあります。
  • printは値を返すので、式として使用できます。

配列とオブジェクトの構造化ビューの出力

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

vprintfvsprintfの2つの関数はprintfsprintfとして動作しますが、個々の変数の代わりに書式文字列と値の配列を受け入れます。

エコーとの文字列連結

連結を使用して、文字列を出力する際に​​「終わりから終わりまで」( echoprintなど)を結合することができます。

変数を連結するには、を使用し. (ピリオド/ドット)。

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow