如何在我自己的函数中使用Codeigniter方法?

时间:2013-12-26 01:27:07

标签: php codeigniter

我使用Codeigniter作为我的PHP框架,在我的一个控制器中,我想在我自己创建的函数中包含一个Codeingiter方法。我希望在我的函数中包含的CodeIgniter方法是“$ this-> db-> escape($ var);”,它是Codeigniter的转义查询。我的PHP代码如下:

foreach ($array as $item)
{
  $name = $item["name"];
  $name = processvar($name);
}

function processvar($var) {
  $var = $this->db->escape($var);
  return $var;
}

但是,上面的代码会产生以下错误消息:

Fatal error: Using $this when not in object context in [folder path]/index.php on line #

请告知我如何在自己的自定义函数中包含“$ this-> db-> escape()”方法。

2 个答案:

答案 0 :(得分:1)

function processvar($var) {
    $CI =& get_instance();
    $var = $CI->db->escape($var);

    return $var;
}

答案 1 :(得分:0)

如果您想在自己的函数中使用其他库/框架中的函数,有时最好查看源代码。请记住,修改任何项目的核心是不可取的,但在开源世界中鼓励查看它是如何工作的。这是学习如何编码的最佳方式!

查看Codeigniter的核心,这个函数:

$this->db->escape()

位于第681行附近的codeIgniter-base/system/database/DB_driver.php基本上是:

的包装器
$this->escape_str()

位于codeIgniter-base/system/database/drivers/sqlsrv/sqlsrv_driver.php左右第258行。这本身就是这个功能:

function escape_str($str, $like = FALSE)
{
    // Escape single quotes
    return str_replace("'", "''", $str);
}

知道这一点,为什么不在代码中执行此操作:

function processvar($var) {
  $var = str_replace("'", "''", $var);
  return $var;
}

那就是说,你的功能是否会存在于Codeigniter项目中?那么也许最好为你的函数创建一个新类,扩展核心Codeigniter类,但是添加你的方法(aka:functions)。但是,如果不了解这种编码的背景,很难说。