我正在编写内容管理系统。页面管理员输入页面的内容,当他输入由特殊字符包围的数字时,它在解析时被查看器屏幕上的数据库条目替换。为了在解析中实现这一点,我正在使用preg_replace_callback()。但是,我无法将数据库连接变量传递给回调函数,因此无法正常工作。作为一个短期的解决方法,我只是试图在这一个实例中使数据库连接成为一个全局变量并以这种方式使用它,但这只是一个草率的kludge而不是长期的好主意。
有谁知道如何解决我的问题,甚至是一种不同的,更好的方式来做我想做的事情?
答案 0 :(得分:3)
你必须创建一个包装它的函数/方法。
class PregCallbackWrap {
private $dbcon;
function __construct($dbcon) { $this->dbcon = $dbcon; }
function callback(array $matches) {
/* implementation of your callback here. You can use $this->dbcon */
}
}
$dbcon = /* ... */
preg_replace_callback('/PATTERN/',
array(new PregCallbackWrap($dbcon), 'callback'), $subject,);
在PHP 5.3中,您可以简单地执行:
$dbcon = /* ... */
preg_replace_callback('/PATTERN/',
function (array $matches) use ($dbcon) {
/* implementation here */
},
$subject
);
答案 1 :(得分:0)
在回调中,您可以调用一个返回数据库连接的函数吗?例如,singleton class具有数据库连接。
答案 2 :(得分:0)
Artefacto的答案是正确的(并且应该被OP接受),但对于寻找更通用解决方案的任何人,您可以参考this question on SE