Ошибка Warning: preg_replace()

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
apelisin
Сообщения: 2
Зарегистрирован: 17 дек 2015, 21:34

17 дек 2015, 21:41

Всем привет.

Столкнулся и я с такой ошибкой в php 5.6

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/html/test.site.ru/engine/classes/parse.class.php on line 410

сама строка

Код: Выделить всё

$source = preg_replace( "#\[uppod=([^\]]+)\]#ies", "\$this->build_uppod('\\1')", $source );
переделываем на такую

Код: Выделить всё

$source = preg_replace_callback( "#\[uppod=([^\]]+)\]#is", function($m) use ($this){return $this->build_uppod($m[1]);}, $source );
Получаем ошибку

Fatal error: Cannot use $this as lexical variable.

да, вот что мне phpinfo говорит

PHP Version 5.6.14-0+deb8u1
Apache Version Apache/2.4.10 (Debian)

Заранее спасибо.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

18 дек 2015, 00:14

$this не видит, укажи имя класса, и/или чего это за страшная надпись function($m)use ($this){
[syntax=Delphi] [/syntax]
apelisin
Сообщения: 2
Зарегистрирован: 17 дек 2015, 21:34

18 дек 2015, 00:21

решение было найдено таким

Код: Выделить всё

$that = $this;
$source = preg_replace_callback( "#\[uppod=([^\]]+)\]#is", function($m) use ($that){return $that->build_uppod($m[1]);}, $source );
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

18 дек 2015, 11:30

Нагуглил на свежую голову - use это реализация замыкания в php.. $this скорее всего на вызывающую структуру пытается ссылаться в данной точке..
[syntax=Delphi] [/syntax]
Ответить