我试图理解一些我发现开源 oauth-php 库的代码。相关的代码片段是:
protected function sql_printf ( $args )
{
$sql = array_shift($args);
if (count($args) == 1 && is_array($args[0]))
{
$args = $args[0];
}
$args = array_map(array($this, 'sql_escape_string'), $args);
return vsprintf($sql, $args);
}
其中 $args 是一个参数数组,其中包含用于格式化打印操作的变量。我查看了 array_map 的文档:
http://php.net/manual/en/function.array-map.php
和用户评论,我没有看到任何用例,其中调用 array_map() 的第一个参数是一个数组本身。在我看到的所有用例中,第一个参数要么是 NULL,要么是(回调)函数。对我来说很明显,代码采用 $args 数组,然后使用 $this->sql_escape_string() 清理的参数构建一个新数组。
但是语句“array($this, 'sql_escape_string')”让我很失望,因为我本来希望只是 '$this->sql_escape_string',或者这不是一个有效的语法?如果是这样,如何将 $this 和 'sql_escape_string' 包装在一个数组中创建一个有效的回调函数供 array_map() 使用?
——罗施勒