mirror of
https://github.com/php/doc-ja.git
synced 2026-03-24 07:02:08 +01:00
170 lines
6.1 KiB
XML
170 lines
6.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 78d17c25eeecc78cb7098b1a01d42391e36af2c1 Maintainer: takagi Status: ready -->
|
|
<!-- CREDITS: hirokawa -->
|
|
<refentry xml:id="function.eval" xmlns="http://docbook.org/ns/docbook">
|
|
<refnamediv>
|
|
<refname>eval</refname>
|
|
<refpurpose>文字列を PHP コードとして評価する</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<type>mixed</type><methodname>eval</methodname>
|
|
<methodparam><type>string</type><parameter>code</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
指定した <parameter>code</parameter>
|
|
を PHP コードとして評価します。
|
|
</para>
|
|
<para>
|
|
評価されるコードは、<function>eval</function> がコールされた行における
|
|
<link linkend="language.variables.scope">変数のスコープ</link>
|
|
を継承します。コールされた時点で利用可能なあらゆる変数が、
|
|
評価されるコード中で読み取ることができますし、変更することもできます。
|
|
しかし、定義されている全ての関数やクラスは、グローバル名前空間で定義されます。
|
|
言い換えると、コンパイラは評価されるコードを
|
|
<link linkend="function.include">include</link> された別のファイルのようにみなすということです。
|
|
</para>
|
|
<caution>
|
|
<para>
|
|
<function>eval</function> は<emphasis>非常に危険な</emphasis>言語構造です。
|
|
というのも、任意の PHP コードを実行できてしまうからです。
|
|
<emphasis>これを使うことはおすすめしません。</emphasis>
|
|
いろいろ検討した結果どうしても使わざるを得なくなった場合は、細心の注意を払って使いましょう。
|
|
<emphasis>ユーザーから受け取ったデータをそのまま渡してはいけません。</emphasis>
|
|
渡す前に、適切な検証が必要です。
|
|
</para>
|
|
</caution>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>code</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
有効な PHP コード。これを評価します。
|
|
</para>
|
|
<para>
|
|
<link linkend="language.basic-syntax.phpmode">PHP
|
|
開始タグ</link>を含めてはいけません。つまり、
|
|
<literal>'<?php echo "Hi!"; ?>'</literal> ではなく
|
|
<literal>'echo "Hi!";'</literal> を渡さなければならないということです。
|
|
適切に PHP タグを使えば、PHP モードからいったん抜けてもう一度 PHP モードに戻るということも可能です。
|
|
たとえば、このようになります。
|
|
<literal>'echo "PHP モード!"; ?>HTML モード!<?php echo "ふたたび PHP モード!";'</literal>
|
|
</para>
|
|
<para>
|
|
それはさておき、渡すコードは PHP として有効な形式でなければなりません。
|
|
つまり、すべての文はセミコロンで終了する必要があるということです。
|
|
たとえば <literal>'echo "やあ!"'</literal> はパースエラーになりますが、
|
|
<literal>'echo "やあ!";'</literal> は動作します。
|
|
</para>
|
|
<para>
|
|
<literal>return</literal> 文は、コードの評価をただちに終了します。
|
|
</para>
|
|
<para>
|
|
コードの実行は、<function>eval</function> を呼び出したスコープ内で行われます。
|
|
したがって、<function>eval</function> の中で定義したり変更したりした変数は
|
|
<function>eval</function> を抜けた後でも参照可能です。
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<para>
|
|
評価されるコードの中で <literal>return</literal> が
|
|
コールされない限り、<function>eval</function> は &null; を返します。
|
|
<literal>return</literal> がコールされた場合は、その値を返します。
|
|
PHP 7 以降、評価されるコードの中でパースエラーが発生した場合は、
|
|
<function>eval</function> は <classname>ParseError</classname> 例外をスローします。
|
|
PHP 7 より前のバージョンでは、この場合に
|
|
<function>eval</function> は &false; を返していました。
|
|
それ以降のコードは通常通り実行されます。
|
|
<function>eval</function> の中でのパースエラーを
|
|
<function>set_error_handler</function>
|
|
で捕捉することはできません。
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title><function>eval</function> の例 - 簡単なテキストのマージ</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$string = 'cup';
|
|
$name = 'coffee';
|
|
$str = 'This is a $string with my $name in it.';
|
|
echo $str. "\n";
|
|
eval("\$str = \"$str\";");
|
|
echo $str. "\n";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
This is a $string with my $name in it.
|
|
This is a cup with my coffee in it.
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="notes">
|
|
&reftitle.notes;
|
|
|
|
¬e.language-construct;
|
|
|
|
&tip.ob-capture;
|
|
<note>
|
|
<para>
|
|
評価されるコードの中で致命的なエラーが発生した場合は、
|
|
スクリプト全体が終了します。
|
|
</para>
|
|
</note>
|
|
</refsect1>
|
|
|
|
<refsect1 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>call_user_func</function></member>
|
|
</simplelist>
|
|
</para>
|
|
</refsect1>
|
|
</refentry>
|
|
|
|
<!-- 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:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|