関数・クラス解説

eval

version:PHP 4, PHP 5, PHP 7 (公式)

文字列を PHP コードとして評価する

公式リファレンス

書式

eval ( string $code ) : mixed

説明

指定した code を PHP コードとして評価します。

警告

eval() は非常に危険な言語構造です。 というのも、任意の PHP コードを実行できてしまうからです。 これを使うことはおすすめしません。 いろいろ検討した結果どうしても使わざるを得なくなった場合は、細心の注意を払って使いましょう。 ユーザーから受け取ったデータをそのまま渡してはいけません。 渡す前に、適切な検証が必要です。

パラメータ

code
有効な PHP コード。これを評価します。 PHP 開始タグを含めてはいけません。つまり、 ' echo "Hi!"; ' ではなく 'echo "Hi!";' を渡さなければならないということです。 適切に PHP タグを使えば、PHP モードからいったん抜けてもう一度 PHP モードに戻るということも可能です。 たとえば、このようになります。 'echo "PHP モード!"; ?>HTML モード!<?php echo "ふたたび PHP モード!";' それはさておき、渡すコードは PHP として有効な形式でなければなりません。 つまり、すべての文はセミコロンで終了する必要があるということです。 たとえば 'echo "やあ!"' はパースエラーになりますが、 'echo "やあ!";' は動作します。 return 文は、コードの評価をただちに終了します。 コードの実行は、eval() を呼び出したスコープ内で行われます。 したがって、eval() の中で定義したり変更したりした変数は eval() を抜けた後でも参照可能です。

返値

評価されるコードの中で return が コールされない限り、eval() は NULL を返します。 return がコールされた場合は、その値を返します。 PHP 7 以降、評価されるコードの中でパースエラーが発生した場合は、 eval() は ParseError 例外をスローします。 PHP 7 より前のバージョンでは、この場合に eval() は FALSE を返していました。 それ以降のコードは通常通り実行されます。 eval() の中でのパースエラーを set_error_handler() で捕捉することはできません。

注意

注意: これは、関数ではなく言語構造のため、可変関数 を用いてコールすることはできません。
ヒントブラウザに直接結果を出力するすべてのものと同様に、出力制御関数を使用してこの関数の出力をキャプチャーし、(例えば)文字列(string)に保存することが可能です。
注意: 評価されるコードの中で致命的なエラーが発生した場合は、 スクリプト全体が終了します。

サンプル

例1 eval() の例 - 簡単なテキストのマージ

$string = 'cup'; $name = 'coffee'; $str = 'This is a $string with my $name in it.'; echo $str. "\n"; eval("\$str = \"$str\";"); echo $str. "\n";

上の例の出力は以下となります。

This is a $string with my $name in it. This is a cup with my coffee in it.

参考

  • call_user_func() - 最初の引数で指定したコールバック関数をコールする
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール