1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-23 22:52:11 +01:00
Files
archived-doc-ja/language/basic-syntax.xml
2026-02-24 23:42:11 +09:00

285 lines
10 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 0e618211e53c66f33762be225a4d57c08ef4b2f7 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi, shimooka, mumumu -->
<chapter xml:id="language.basic-syntax" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
<title>基本的な構文</title>
<sect1 xml:id="language.basic-syntax.phptags">
<title>PHP タグ</title>
<para>
PHP はファイルを処理する際、開始タグと終了タグ
(<literal>&lt;?php</literal><literal>?&gt;</literal>) を認識し、
PHP コード実行の境界を決めます。タグの外側の内容は PHP パーサーに無視されるため、
PHP を他のあらゆる形式のドキュメント中に埋め込むことができるのです。
</para>
<para>
正しいトークン分割のため、<literal>&lt;?php</literal>
の後ろに空白文字(空白、タブ、改行)を入れる必要があります。
これがないと文法エラーが発生します。
</para>
<para>
PHP では、短い形式のechoタグ <literal>&lt;?=</literal> も使えます。
これは、 <code>&lt;?php echo</code> を短くしたものです。
</para>
<para>
<example>
<title>PHP の開始タグと終了タグ</title>
<programlisting role="php">
<![CDATA[
1. <?php echo 'XHTMLまたはXMLドキュメントの中でPHPコードを扱いたい場合は、このタグを使いましょう'; ?>
2. 短い形式の echo タグを使って <?= 'この文字列を表示' ?> とすることもできます。
これは <?php echo 'この文字列を表示' ?> と同じ意味になります。
3. <? echo 'このコードは短縮型のタグに囲まれていますが、'.
'short_open_tag が有効な場合にしか動作しません'; ?>
]]>
</programlisting>
</example>
</para>
<para>
短縮型のタグ(例 3.)はデフォルトで有効ですが、
&php.ini; 設定ファイルのディレクティブ
<link linkend="ini.short-open-tag">short_open_tag</link> で無効にすることもできますし、
<option>--disable-short-tags</option> オプション付きで configure した場合は、
デフォルトで無効にすることも出来ます。
</para>
<para>
<note>
<para>
短縮形のタグは無効にすることができるので、
互換性を最大限保つために、通常のタグ
(<code>&lt;?php ?&gt;</code> and <code>&lt;?= ?&gt;</code>) を使うことを推奨します。
</para>
</note>
</para>
<para>
ファイルが PHP コードで終わる場合は、ファイルの最後の終了タグは省略するのがおすすめです。
終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるからです。
余分な空白や改行のせいで PHP が出力バッファリングを開始し、その時点の内容を意図せず出力してしまうことになります。
</para>
<para>
<example>
<title>PHP コードのみのファイル</title>
<programlisting role="php">
<![CDATA[
<?php
echo "みなさん、こんにちは\n";
// ... いろんなコードたち
echo "最後のごあいさつ\n";
// PHP 終了タグを書かずに、ここでスクリプトを終わります。
]]>
</programlisting>
</example>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.phpmode">
<title>HTML からの脱出</title>
<para>
PHP のパーサーは、開始タグと終了タグに囲まれていない部分をすべて無視します。
そのおかげで、PHP のファイルにそれ以外のコンテンツを混在させることができるのです。
たとえば PHP を HTML ドキュメントに組み込んで、テンプレートを作ったりすることもできます。
</para>
<para>
<example>
<title>HTML に PHP を埋め込む</title>
<programlisting role="php">
<![CDATA[
<p>この部分は PHP から無視され、そのままブラウザには表示されます。</p>
<?php echo '一方、この部分はパースされます。'; ?>
<p>この部分も PHP から無視され、そのままブラウザには表示されます。</p>
]]>
</programlisting>
</example>
</para>
<para>
これは期待通りに動作します。なぜなら、PHP インタプリタは ?&gt; 終了タグを見つけると
それ以降新たに開始タグを見つけるまでの内容を何でも出力するからです
(終了タグの直後の改行は別です。
<link linkend="language.basic-syntax.instruction-separation">命令の分離</link>
を参照ください)。
しかし、PHP が条件文の中にいる場合は話が別です。
その場合は、まず条件式の結果を判定してから何をスキップするかを判断します。
次の例を参照ください。
</para>
<para>
条件文を使った例です。
<example>
<title>条件文を使った高度な脱出</title>
<programlisting role="php">
<![CDATA[
<?php if ($expression == true): ?>
条件式が真の場合にこれが表示されます。
<?php else: ?>
それ以外の場合にこちらが表示されます。
<?php endif; ?>
]]>
</programlisting>
</example>
この例では、PHP は条件を満たさないブロックを処理しません。たとえそれが
PHP の開始タグと終了タグに囲まれた部分でなくても、条件文にしたがってそこを読み飛ばします。
というのも、PHP のインタプリタは条件を満たさない箇所をブロックごと読み飛ばすからです。
</para>
<para>
大量のテキストを出力する際に
<function>echo</function><function>print</function>
を用いることを考えると、このように一度 PHP のパースモードを抜けるほうが効率的です。
</para>
<para>
PHP コードを XML や XHTML に
埋め込む場合には、標準規格に従うために &lt;?php ?&gt; タグを使用する
必要があるでしょう。
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.instruction-separation">
<title>命令の分離</title>
<para>
C や Perl と同様に、PHP でもステートメントを区切るにはセミコロンが必要と
なります。PHP コードブロックの終了タグには自動的にセミコロンが含まれていると
認識されます。 従って PHP コードの最終行にはセミコロンを記述する必要はありません。
ブロックの終了タグは、直後に改行がある場合、それを含んだものになります。
</para>
<para>
<example>
<title>改行を囲んだ終了タグを表示させる例</title>
<programlisting role="php">
<![CDATA[
<?php echo "Some text"; ?>
No newline
<?= "But newline now" ?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Some textNo newline
But newline now
]]>
</screen>
</example>
</para>
<para>
<example>
<title>PHP パーサーの開始と終了の例</title>
<programlisting role="php">
<![CDATA[
<?php
echo "テストです\n";
?>
<?php echo "テストです\n" ?>
<?php echo "終了タグを省略しました\n";
]]>
</programlisting>
</example>
</para>
<para>
<note>
<para>
ファイル終端における PHP ブロックの終了タグはオプション(任意)です。
<function>include</function>
<function>require</function> を利用する際には、
終了タグを省略する方が無難です。というのは、そうすることでファイルの最後に
予期せぬ空白文字があらわれてしまうことを防げますし、後でレスポンスに
ヘッダを付加することも可能となるからです。また、出力バッファリングを
使用しており、include したファイルの生成する部分の最後に余計な空白を
つけたくない場合などにも便利です。
</para>
</note>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.comments">
<title>コメント</title>
<para>
PHP は、'C', 'C++' および Unix シェル型Perl 型)のコメントをサポートします。
例えば、
</para>
<para>
<example>
<title>コメント</title>
<programlisting role="php">
<![CDATA[
<?php
echo "テストです\n"; // C++型の単一行用のコメント
/* 複数行用のコメント
もう一行分のコメント */
echo "もうひとつのテストです\n";
echo "最後のテストです\n"; # シェル型の単一行用のコメント
?>
]]>
</programlisting>
</example>
</para>
<simpara>
"一行"コメントは、改行または PHP コードのブロックの終わり
のうちどちらか最初にくる方までです。
つまり、<literal>// ... ?&gt;</literal>
あるいは <literal># ... ?&gt;</literal> の後に続く HTML コードは
表示されるということです。?&gt; により PHP モードを終了して
HTML モードに戻ると、そこでは <literal>//</literal>
あるいは <literal>#</literal> は何の影響も
及ぼしません。
</simpara>
<para>
<example>
<title>一行コメント</title>
<programlisting role="php">
<![CDATA[
<h1>これは <?php # echo 'シンプルな';?> 例です。</h1>
<p>上の見出しは 'これは 例です。' となります。
]]>
</programlisting>
</example>
</para>
<simpara>
'C' 型のコメントは、最初に <literal>*/</literal> が現れた時点で終了します。
'C' 型のコメントがネストしないように注意する必要があります。
大きなブロックをコメントアウトしようとする際に、この間違いを犯しがちです。
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/*
echo 'テストです'; /* このコメントが問題を生じます */
*/
?>
]]>
</programlisting>
</informalexample>
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->