<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.strings.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'function.echo.php',
    1 => 'echo',
    2 => '1 つ以上の文字列を出力する',
  ),
  'up' => 
  array (
    0 => 'ref.strings.php',
    1 => 'String 関数',
  ),
  'prev' => 
  array (
    0 => 'function.crypt.php',
    1 => 'crypt',
  ),
  'next' => 
  array (
    0 => 'function.explode.php',
    1 => 'explode',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'reference/strings/functions/echo.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.echo" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">echo</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">echo</span> &mdash; <span class="dc-title">1 つ以上の文字列を出力する</span></p>

 </div>
 
 <div class="refsect1 description" id="refsect1-function.echo-description">
  <h3 class="title">説明</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>echo</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">...$expressions</code></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

  <p class="simpara">
   ひとつ以上の(文字列として評価される)式を出力します。末尾に改行やスペースを付加することはありません。
  </p>
  <p class="para">
   <code class="literal">echo</code> は実際には関数ではなく、言語構造です。
   <code class="literal">echo</code> キーワードの後に続く引数は、
   コンマで区切られた(文字列として評価される)式のリストであり、括弧で括る必要はありません。
   他の言語構造と異なり <code class="literal">echo</code>
   には戻り値がありません。そのため、
   式のコンテクストでは使うことができません。
  </p>
  <p class="para">
   <code class="literal">echo</code> には、開始タグの直後に等号を付ける短縮構文もあります。
   この短縮構文は、設定オプション<a href="ini.core.php#ini.short-open-tag" class="link">short_open_tag</a>
   が無効な場合でも使えます。
   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000">I have <span style="color: #0000BB">&lt;?=$foo?&gt;</span> foo.</span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <code class="literal">print</code> との主な違いは、
   <code class="literal">echo</code> がリスト形式の引数を受け付け、戻り値を持たないことです。
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.echo-parameters">
  <h3 class="title">パラメータ</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">expressions</code></dt>
     <dd>
      <p class="para">
       出力したいひとつ以上の文字列として評価される式。
       コンマで区切ります。
       文字列として評価されない値を渡した場合、文字列に強制的に変換されます。
       これは、<a href="language.types.declarations.php#language.types.declarations.strict" class="link"><code class="literal">strict_types</code> ディレクティブ</a> が有効になっていても同じです。
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.echo-returnvalues">
  <h3 class="title">戻り値</h3>
  <p class="para">
   値を返しません。
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.echo-examples">
  <h3 class="title">例</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>例1 <code class="literal">echo</code> の例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"echo does not require parentheses."</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 文字列は、複数の引数として個別に渡すこともできますし、<br />// 連結し、ひとつの引数として渡すこともできます。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'This '</span><span style="color: #007700">, </span><span style="color: #DD0000">'string '</span><span style="color: #007700">, </span><span style="color: #DD0000">'was '</span><span style="color: #007700">, </span><span style="color: #DD0000">'made '</span><span style="color: #007700">, </span><span style="color: #DD0000">'with multiple parameters.'</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">'This ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'string ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'was ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'made ' </span><span style="color: #007700">. </span><span style="color: #DD0000">'with concatenation.' </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 改行やスペースが付加されることはありません; 以下は、"helloworld" を一行で出力します。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"world"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 上と同じです。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"This string spans<br />multiple lines. The newlines will be<br />output as well"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"This string spans\nmultiple lines. The newlines will be\noutput as well."</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 引数は文字列を生成するあらゆる式を指定することができます。<br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">"example"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"foo is </span><span style="color: #0000BB">$foo</span><span style="color: #DD0000">"</span><span style="color: #007700">; </span><span style="color: #FF8000">// foo is example<br /><br /></span><span style="color: #0000BB">$fruits </span><span style="color: #007700">= [</span><span style="color: #DD0000">"lemon"</span><span style="color: #007700">, </span><span style="color: #DD0000">"orange"</span><span style="color: #007700">, </span><span style="color: #DD0000">"banana"</span><span style="color: #007700">];<br />echo </span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">" and "</span><span style="color: #007700">, </span><span style="color: #0000BB">$fruits</span><span style="color: #007700">); </span><span style="color: #FF8000">// lemon and orange and banana<br /><br />// 文字列でない値は、文字列に強制されます。たとえ declare(strict_types=1) が使われていても同じです。<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">6 </span><span style="color: #007700">* </span><span style="color: #0000BB">7</span><span style="color: #007700">; </span><span style="color: #FF8000">// 42<br /><br />// しかし、以下の例は動作します:<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">$some_var</span><span style="color: #007700">) ? print </span><span style="color: #DD0000">'true' </span><span style="color: #007700">: print </span><span style="color: #DD0000">'false'</span><span style="color: #007700">; </span><span style="color: #FF8000">// print も言語構造ですが、<br />                                            // これは正しい式であり、1を返します。<br />                                            // よって、式のコンテクストで使うことが出来ます。<br /><br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$some_var </span><span style="color: #007700">? </span><span style="color: #DD0000">'true'</span><span style="color: #007700">: </span><span style="color: #DD0000">'false'</span><span style="color: #007700">; </span><span style="color: #FF8000">// 式を最初に評価し、echo  に渡します。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>例2 <code class="literal">echo</code> is not an expression</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// echo は式として振る舞わないので、以下のコードは正しくありません。<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">$some_var</span><span style="color: #007700">) ? echo </span><span style="color: #DD0000">'true' </span><span style="color: #007700">: echo </span><span style="color: #DD0000">'false'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.echo-notes">
  <h3 class="title">注意</h3>
  <blockquote class="note"><p><strong class="note">注意</strong>: <span class="simpara">これは、関数ではなく
言語構造のため、<a href="functions.variable-functions.php" class="link">可変関数</a> や <a href="functions.arguments.php#functions.named-arguments" class="link">名前付き引数</a> を用いてコールすることはできません。</span></p></blockquote>

  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <strong>括弧を使う</strong><br />
   <p class="para">
    <code class="literal">echo</code> に対して引数をひとつだけ括弧で囲んで渡しても文法エラーにはなりませんが、
    通常の関数コールのような文法に見えてしまいます。
    しかし、これは誤解を招く恐れがあります。
    なぜなら、括弧は実際には出力を構成する式の一部であり、
    <code class="literal">echo</code> の文法の一部ではないからです。

    <div class="example" id="example-3">
     <p><strong>例3 括弧を使う</strong></p>
     <div class="example-contents">
     <div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// "hello" を出力します。<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// 同じく"hello" を出力します。なぜなら ("hello") は正しい式だからです。<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">) * </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// "9" を出力します; 括弧によって 1+2 が先に評価され、3*3がその次に評価されます。<br />// echo 文は、式の評価結果全体をひとつの引数とみなします。<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #DD0000">" world"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// "hello world" を出力します。<br /><br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">), (</span><span style="color: #DD0000">" world"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// "hello world" を出力します; 括弧は個々の式の一部です。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
    <div class="example" id="example-4">
     <p><strong>例4 不正な式</strong></p>
     <div class="example-contents">
     <div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo(</span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #DD0000">" world"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// Parse Error をスローします。なぜなら、 ("hello", " world") は正しい式ではないからです。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  </p></blockquote>
 
  <div class="tip"><strong class="tip">ヒント</strong>
   <p class="para">
    複数の引数を<code class="literal">echo</code> に渡すことで、
    PHP におけるピリオド演算子の優先順位が高いことによる複雑な挙動を避けることができます。
    たとえば、ピリオド演算子は三項演算子より演算子が高くなっています。さらにPHP 8.0.0 より前のバージョンでは、加算および減算演算子と優先順位が同じでした:
   </p>
   <div class="example-contents">
    <div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 以下の例では、'Hello ' . isset($name) という式が先に評価されます。<br />// そして、常にこれは true と評価されるので、echo への引数は常に $name になります。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Hello ' </span><span style="color: #007700">. isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">'John Doe' </span><span style="color: #007700">. </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 上の例を意図した振る舞いにしようとするなら、以下のように追加の括弧が必要です。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Hello ' </span><span style="color: #007700">. (isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">'John Doe'</span><span style="color: #007700">) . </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// PHP 8.0.0 より前のバージョンでは、以下は "Sum: 3" ではなく、"2" を出力していました。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Sum: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 繰り返しますが、括弧を追加することで、意図通りの評価順序を保証できます。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Sum: ' </span><span style="color: #007700">. (</span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">);</span></span></code></div>
   </div>

   <p class="para">
    複数の引数を渡した場合、
    優先順位を強制するための括弧は不要です。
    なぜなら、それぞれの文字列表現は別のものだからです:
   </p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello "</span><span style="color: #007700">, isset(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) ? </span><span style="color: #0000BB">$name </span><span style="color: #007700">: </span><span style="color: #DD0000">"John Doe"</span><span style="color: #007700">, </span><span style="color: #DD0000">"!"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Sum: "</span><span style="color: #007700">, </span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">2</span><span style="color: #007700">;</span></span></code></div>
   </div>

  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.echo-seealso">
  <h3 class="title">参考</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.print.php" class="function" rel="rdfs-seeAlso">print</a> - 文字列を出力する</span></li>
    <li><span class="function"><a href="function.printf.php" class="function" rel="rdfs-seeAlso">printf()</a> - フォーマット済みの文字列を出力する</span></li>
    <li><span class="function"><a href="function.flush.php" class="function" rel="rdfs-seeAlso">flush()</a> - システム出力バッファをフラッシュする</span></li>
    <li><a href="language.types.string.php" class="link">文字列リテラルを指定する方法</a></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>