Я использую preg_replace_callback для поиска и замены текстовых ссылок с помощью живых ссылок:
http://www.example.com
в
<a href='http://www.example.com'>www.example.com</a>
Функция обратного вызова, которую я предоставляю функции, находится внутри другого класса, поэтому, когда я пытаюсь:
return preg_replace_callback($pattern, "Utilities::LinksCallback", $input);
Я получаю сообщение об ошибке, при котором функция не существует. Есть идеи?
В PHP при использовании метода класса в качестве обратного вызова вы должны использовать форму обратного вызова array
. То есть вы создаете массив, первым элементом которого является класс (если метод является статическим) или экземпляр класса (если нет), а второй элемент – это функция для вызова. Например
class A { public function cb_regular() {} public static function cb_static() {} } $inst = new A; preg_replace_callback(..., array($inst, 'cb_regular'), ...); preg_replace_callback(..., array('A', 'cb_static'), ...);
Разумеется, функция, которую вы вызываете, должна быть видимой из области, в которой вы используете обратный вызов.
См. http://php.net/manual/en/language.pseudo-types.php , для получения подробной информации о действительных обратных вызовах.
NB Чтение там, похоже, с 5.2.3, вы можете использовать свой метод, если функция обратного вызова является статической.
Вы можете сделать это следующим образом:
return preg_replace_callback($pattern, array("Utilities", "LinksCallback"), $input)
Ссылка: http://php.net/callback