PHPコードで頭を悩ませています。私はPHPにまったく慣れておらず、構文エラーのためにまだ実行されないため、論理的に機能するかどうかはまだわかりません。syntax error, unexpected 'use' (T_USE), expecting '{'
PHPバージョンが完全にサポートしているにもかかわらず、構文エラーが発生しuse
、構文は(私が知る限り)正しいです。
このコードは、どのデータベース実装が指定されているかをチェックし、それがどちらであっても関数を定義します。他の関数から返された関数をグローバル関数として定義することはできないため、関数を変数に格納し、外部スコープから変数をキャプチャするグローバル関数を介してアクセスを「ラップ」するか、少なくともそうする必要があります。
エラーが発生した 2 行がマークされています。
function query_escaper($element_escaper) {
return function($query, $values) use ($element_escaper) {
return join(array_map(
function($query_elem, $value) {
return isset($value)
? $query_elem . $element_escaper($value)
: $query_elem
;
},
explode('?', $query),
$values
));
};
}
function define_postgresql_functions() {
[...]
$escape_query = query_escaper('pg_escape_literal');
#
# XXX The error occurs here :-
#
function escape_query() use ($escape_query) {
return call_user_func_array($escape_query, func_get_args());
}
[...]
}
function define_mysql_functions() {
[...]
$escape_query = query_escaper(function($str) {
return use_database(function($database) use ($str) {
return $database->real_escape_string($str);
});
});
#
# XXX The same error also occurs here :-
#
function escape_query() use ($escape_query) {
return call_user_func_array($escape_query, func_get_args());
}
[...]
}
switch ($database_info['type']) {
case 'postgresql':
define_postgresql_functions();
break;
case 'mysql':
define_mysql_functions();
break;
default:
throw new DatabaseNotImplementedException();
}
私は 2 つの可能な解決策を探しています。外部スコープからこれらの変数をキャプチャできるか、またはグローバル関数を他の関数から返される関数として定義する別の方法です。