1
0
mirror of https://github.com/php/doc-ja.git synced 2026-04-26 01:18:04 +02:00
Files
archived-doc-ja/language/basic-syntax.xml
T
TAKAGI Masahiro cd2ebbddd7 sync with en.
git-svn-id: https://svn.php.net/repository/phpdoc/ja/trunk@235353 c90b9560-bf6c-de11-be94-00142212c4b1
2007-05-10 17:03:08 +00:00

248 lines
9.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 1.18 $ -->
<!-- EN-Revision: 1.50 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi, shimooka -->
<chapter id="language.basic-syntax">
<title>基本的な構文</title>
<sect1 id="language.basic-syntax.phpmode">
<title>HTML からの脱出</title>
<para>
PHP はファイルを解析して開始タグと終了タグを探します。タグが
見つかると、PHP はコードの実行を開始したり終了したりします。
このような仕組みにより、PHP を他のあらゆる形式のドキュメント中に
埋め込むことができるのです。つまり、開始タグと終了タグで囲まれている
箇所以外のすべての部分は、PHP パーサに無視されます。
たいていの場合、PHP は HTML ドキュメントの中に埋め込まれます。
たとえば以下のようにです。
<informalexample>
<programlisting role="php">
<![CDATA[
<p>この部分は無視されます。</p>
<?php echo '一方、この部分はパースされます。'; ?>
<p>この部分も無視されます。</p>
]]>
</programlisting>
</informalexample>
</para>
<para>
もっと複雑な構造を用いることもできます:
<example>
<title>高度なエスケープ処理</title>
<programlisting role="php">
<![CDATA[
<?php
if ($expression) {
?>
<strong>真です。</strong>
<?php
} else {
?>
<strong>偽です。</strong>
<?php
}
?>
]]>
</programlisting>
</example>
これは期待通りに動作します。なぜなら、PHP は ?&gt; 終了タグを見つけると
それ以降新たに開始タグを見つけるまでの内容を何でも出力するからです
(終了タグの直後の改行は別です。
<link linkend="language.basic-syntax.instruction-separation">命令の分離</link>
を参照ください)。
確かにこの例には少し無理があります。しかし、大量のテキストを出力する際に
<function>echo</function><function>print</function> を用いることを
考えると、このように一度 PHP のパースモードを抜けるほうが効率的です。
</para>
<para>
PHP で用いられるタグは 4 種類あります。
これらのうちの 2 つ、&lt;?php ?&gt;
&lt;script language="php"&gt; &lt;/script&gt; は常に使用することができます。
残りの 2 つは短縮型のタグと <productname>ASP</productname> スタイルの
タグで、これらは &php.ini; ファイルによって有効か無効かを切り替えられます。
中には短縮型のタグや <productname>ASP</productname> スタイルのタグを
便利に感じる人がいるかも知れませんが、長いタグに比べると移植性に欠けます。
また一般的には推奨されていません。
<note>
<para>
さらに注意しなければならないことがあります。PHP コードを XML や XHTML に
埋め込む場合には、標準規格に従うために &lt;?php ?&gt; タグを使用する
必要があるでしょう。
</para>
</note>
</para>
<para>
<example>
<title>PHP の開始タグと終了タグ</title>
<programlisting role="php">
<![CDATA[
1. <?php echo 'XHTMLまたはXMLドキュメントを処理したい場合は、この方法が良いでしょう'; ?>
2. <script language="php">
echo '(FrontPageのような) いくつかのエディタ は処理命令を好み
ません';
</script>
3. <? echo 'これは、SGML を処理する最もシンプルな方法です'; ?>
<?= expression ?> This is a shortcut for "<? echo expression ?>"
4. <% echo 'オプションでASP形式のタグを使用可能です'; %>
<%= $variable; # これは、"<%echo .." のショートカットです。%>
]]>
</programlisting>
</example>
</para>
<para>
例の 1. と 2. のタグは常に利用可能です。中でも 1. のタグは最も一般的で
推奨される方法です。
</para>
<para>
短縮型のタグ(例 3.)が有効なのは、&php.ini; 設定ファイルのディレクティブ
<link linkend="ini.short-open-tag">short_open_tag</link>
有効になっている場合か PHP が <option>--enable-short-tags</option>
オプションつきで configure されている場合のみです。
<note>
<para>
PHP 3 では、<function>short_tags</function> 関数を用いて
短縮型のタグを有効にすることもできます。<emphasis>これは
PHP 3 でのみ有効な方法です!</emphasis>
</para>
</note>
</para>
<para>
<productname>ASP</productname> 型のタグ(例 4.)が有効なのは、
&php.ini; 設定ファイルのディレクティブ
<link linkend="ini.asp-tags">asp_tags</link> が有効になっている場合のみです。
<note>
<para>
<productname>ASP</productname> 型のタグのサポートは、3.0.4 で追加されました。
</para>
</note>
</para>
<note>
<para>
再利用されるか、または、自分の制御下にないPHPサーバで運用される
アプリケーションまたはライブラリを開発する場合、短縮型のタグの
使用は避けるべきです。これは、短縮型のタグがターゲットサーバー
でサポートされていない可能性があるためです。
可搬性のある、再配布可能なコードでは、短縮型のタグを使用しない
ようにしてください。
</para>
</note>
</sect1>
<sect1 id="language.basic-syntax.instruction-separation">
<title>命令の分離</title>
<para>
C や Perl と同様に、PHP でもステートメントを区切りにはセミコロンが必要と
なります。PHP コードブロックの終了タグには自動的にセミコロンが含まれていると
認識されます。 従って PHP コードの最終行にはセミコロンを記述する必要はありません。
ブロックの終了タグは、直後に改行がある場合、それを含んだものになります。
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo 'テストです';
?>
<?php echo 'テストです' ?>
<?php echo '終了タグを省略しました';
]]>
</programlisting>
</informalexample>
<note>
<para>
ファイル終端における PHP ブロックの終了タグはオプション(任意)です。
<function>include</function>
<function>require</function> を利用する際には、
終了タグを省略する方が無難です。というのは、そうすることでファイルの最後に
予期せぬ空白文字があらわれてしまうことを防げますし、後でレスポンスに
ヘッダを付加することも可能となるからです。また、出力バッファリングを
使用しており、include したファイルの生成する部分の最後に余計な空白を
つけたくない場合などにも便利です。
</para>
</note>
</para>
</sect1>
<sect1 id="language.basic-syntax.comments">
<title>コメント</title>
<para>
PHP は、'C', 'C++' および Unix シェル型(Perl 型)のコメントをサポートします。
例えば、
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo 'テストです'; // C++型の単一行用のコメント
/* 複数行用のコメント
もう一行分のコメント */
echo 'もうひとつのテストです';
echo '最後のテストです'; # シェル型の単一行用のコメント
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
"一行"コメントは、改行または PHP コードのブロックの終わり
のうちどちらか最初にくる方までです。
つまり、<literal>// ... ?&gt;</literal>
あるいは <literal># ... ?&gt;</literal> の後に続く HTML コードは
表示されるということです。?&gt; により PHP モードを終了して
HTML モードに戻ると、そこでは <literal>//</literal>
あるいは <literal>#</literal> は何の影響も
及ぼしません。<link linkend="ini.asp-tags">asp_tags</link>
設定ディレクティブが有効になっている場合、<literal>// %&gt;</literal>
および <literal># %&gt;</literal>
でも同じような動作になります。しかし、一行コメントの中の
<literal>&lt;/script&gt;</literal> では PHP モードを終了することは
ありません。
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
<h1>これは <?php # echo 'シンプルな';?> 例です。</h1>
<p>上の見出しは 'これは 例です。' となります。
]]>
</programlisting>
</informalexample>
<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:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->