Я пишу систему управления контентом. Администратор страницы вводит контент для страницы, и, когда он вводит число, окруженное специальными символами, его заменяет запись базы данных на экране зрителя при анализе. Чтобы выполнить это при разборе, я использую preg_replace_callback (). Однако я не могу передать свою переменную подключения к базе данных в функцию обратного вызова, поэтому она не будет работать. В качестве краткосрочного решения я просто пытаюсь сделать соединение с базой данных глобальной переменной в этом одном экземпляре и использовать его таким образом, но это не что иное, как неряшливый kludge и не очень хорошая идея для долгосрочного.
Кто-нибудь знает, как решить мою проблему или даже другой, лучший способ делать то, что я пытаюсь сделать?
Вы должны создать функцию / метод, который ее обертывает.
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 );
при$dbcon = /* ... */ preg_replace_callback('/PATTERN/', function (array $matches) use ($dbcon) { /* implementation here */ }, $subject );
В обратном вызове вы можете вызвать функцию, которая возвращает соединение с базой данных? Например, одноэлементный класс, имеющий соединение с базой данных.
Ответ Artefacto правильный (и должен быть принят OP), но для тех, кто ищет более общее решение, вы можете обратиться к этому вопросу на SE