我使用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()”方法。
答案 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)。但是,如果不了解这种编码的背景,很难说。