6

私はこの単純なPHPコードを持っています:

<?php

$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));

ご覧のとおり、$code構文エラーがあります。これを実行すると、次の結果が得られます。

Parse error: syntax error, unexpected '}' in file.php(4) : runtime-created function on line 1
Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in file.php on line 4

解析エラーを変数に入れるにはどうすればよいですか? 例えば:

$error = some_func_to_get_error();
echo $error;
// Parse error: syntax error, unexpected '}' in file.php(4) : runtime-created function on line 1
4

1 に答える 1

3

私はこの問題に約1週間巻き込まれ、ついに興味深いものを見つけました。ご存知のように、error_get_last 最後のエラーに関する情報を返す build-it 関数が呼び出されます。このコードでは:

<?php

$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));
$error = error_get_last();

次のようなものが返されます。

Array
(
    [type] => 2
    [message] => call_user_func() expects parameter 1 to be a valid callback, no array or string given
    [file] => file.php
    [line] => 4
)

の実行時に最後のエラーが発生しましたcall_user_func。コールバックが必要ですが、create_function正しく機能しませんでした ($code解析エラーがあるため)。

ただし、カスタム エラー ハンドラwhich をreturn true;設定するcall_user_funcと、エラーはスローされず、最後のエラーは、ランタイムで作成された関数内のエラーになります。

<?php

// returning true inside the callback
set_error_handler(function () { return true; });

$code = "echo 'Hello World'; }";
call_user_func(create_function('', $code));
$error = error_get_last();

そして今、エラーは次のようになります。

Array
(
    [type] => 4
    [message] => syntax error, unexpected '}'
    [file] => file.php(7) : runtime-created function
    [line] => 1
)
于 2013-06-25T11:08:17.727 に答える