我有文字字符串“[你的名字]< [你的电子邮件]>”和一个包含一个看起来像这个
的数组的Object [posted_data] => Array
(
[_wpcf7] => 35
[_wpcf7_version] => 3.5.2
[_wpcf7_locale] => en_US
[_wpcf7_unit_tag] => wpcf7-f35-p29-o1
[_wpnonce] => 2c06b3f0f3
[your-name] => Andrew
[your-email] => fr@ibhv.cou
[your-subject] => plasd
[your-message] => 11 11 11
[_wpcf7_is_ajax_call] => 1
)
所以我想要做的是编写一个函数,用上面的字符串替换上面字符串中的文本。
到目前为止,我有这个功能
function wpcf7ev_get_senders_email_address($wpcf7_form)
{
//gets the tags
$senderTags = $wpcf7_form->mail['sender'];
// replace <contents> with posted_data
$sendersEmailAddress = preg_replace_callback('/\[(.+?)\]/',
function ($matches)
{
return $wpcf7_form->posted_data[$matches[1]];
},
$senderTags
);
return $sendersEmailAddress;
}
我是以正确的方式来做这件事的吗?该回调函数失败,因为匿名函数似乎无法访问$ wpcf7_form参数。
我正在使用匹配[1],正则表达式返回
Array
(
[0] => [your-name]
[1] => your-name
)
所以也许可以改进。
感谢。
答案 0 :(得分:0)
通过use
构造传递任何依赖项,例如
function ($matches) use ($wpcf7_form) {
// etc
答案 1 :(得分:0)
创建一个帮助器类并将其作为回调参数传递。这样就可以避免使用全局参数。
class EmailAddressCallback {
private $data;
function __construct($data) {
$this->data = $data;
}
public function callback_function($matches) {
return $this->data->posted_data[$matches[1]];
}
}
function wpcf7ev_get_senders_email_address($wpcf7_form)
{
//gets the tags
$senderTags = $wpcf7_form->mail['sender'];
// replace <contents> with posted_data
$callback = new EmailAddressCallback($wpcf7_form);
$sendersEmailAddress = preg_replace_callback('/\[(.+?)\]/',
array($callback, 'callback_function'),
$senderTags
);
return $sendersEmailAddress;
}
var_dump(htmlentities(wpcf7ev_get_senders_email_address($wpcf7_form)));