在类中使用Array Walk

时间:2011-05-07 00:25:19

标签: php class

我遇到一个小编程问题。我试图在一个类中执行一个函数,我有一个数组,我使用array_walk对该数组中的每个变量执行一个函数。问题是我正在执行的函数是同一个类中的方法。我查看了我的代码,但无法找到问题所在。请让我知道这个错误的可能解决方案是什么,或者如果你看到我没有看到的东西。

目前它甚至没有执行函数escape()。我故意在状态变量中添加了一个“我希望它被转义的状态变量”,但事实并非如此。

一点背景:这是我正在构建的数据库类,prepare()方法将帮助在查询执行之前转义变量。我删除了一些与此问题无关的代码。

这是它给我的结果:UPDATE table_name SET status='I'm doing good!' WHERE username='someone'

<?php
class Database {
    var $weak_escape = false;

    function escape($str) {
    if ($this->weak_escape) return $this->weak_escape($str);
    else return $this->sql_escape($str);
    }

    function weak_escape($str) {
    return addslashes($str);
    }

    function sql_escape($str) {
    return mysql_real_escape_string($str);
    }

    function prepare($query) {
    $args = func_get_args();
    array_shift($args);
    array_walk($args, array(&$this, 'escape'));
    return vsprintf($query, $args);
    }
}

$db = new Database();
$username = "someone";
$status = "I'm doing good!";
echo $db->prepare("UPDATE table_name SET status='%s' WHERE username='%s'", $status, $username);
?>

3 个答案:

答案 0 :(得分:2)

我将我的转义函数设为静态,因为它对每个实例都是相同的:

class Database {
    static function escape($str) {
       return addslashes($str);
    }

    function prepare($query) {
      $args = func_get_args();
      array_shift($args);
      array_walk($args, array('Database', 'escape'));  //Look here
      return vsprintf($query, $args);
    }
}

希望这会有所帮助。干杯

答案 1 :(得分:1)

你需要修改参数(array-item的引用),如果你返回它就不会这样做:

function escape(&$str)
{
  $str=addslashes($str);
}

答案 2 :(得分:1)

希望这就是你要找的东西。 我这样做了:

class Database {
    function escape($str) {
       return addslashes($str);
    }

    function prepare($query) {
    $args = func_get_args();
    $args[1] = $this->escape($args[1]);
    array_shift($args);
    array_walk($args, array($this, 'escape'));
    return vsprintf($query, $args);
    }
}

$db = new Database();
$username = "someone";
$status = "I'm doing good!";
print $db->prepare("UPDATE table_name SET status='%s' WHERE username='%s'", $status, $username);

得到了结果:

UPDATE table_name SET status='I\'m doing good!' WHERE username='someone'