Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Почему код обработки строки не работает на php 5.2.17 но работает на 5.3?

Почему код обработки строки не работает на php 5.2.17 но работает на 5.3?


     21.11.2015    Общие вопросы по PHP, Ламерские вопросы    921

вопрос
Добрый день! Подскажите , пожалуйста, почему код обработки строки (делающий заглавной букву после точки), который работает на 5.3, и по идее должен работать на 5.2.17, на старой версии не работает,но и не выдает ошибки?


$text = preg_replace_callback('#((?:[.!?]|^)\s*)(\w)#us', create_function('$matches',
        'return $matches[1] . mb_strtoupper($matches[2]);'), $text);

Ответа пока нет


10 комментариев

aios
Эксперт

aios - 21 ноября 2015 11:44 -

Не выдает ошибки потому что отлов exeption мог быть отключен в самом php.ini. А анонимные функции нормально работают как раз в php5.3 если мне не изменяет память.

PunPun
Эксперт

PunPun - 21 ноября 2015 12:11 -

Анонимные функции появились только в PHP 5.3.0

well​

gor.nizon
Юзер

gor.nizon - 21 ноября 2015 20:56 -

http://php.net/manual/ru/functions.anonymous.php
Анонимные функции работают начиная с версии php 5.3.0

atlantgroup
Юзер

atlantgroup - 22 ноября 2015 11:07 -

Вообще-то create_function функция используется начиная с 4 версии php function.create-function

nowheremany
Эксперт

nowheremany - 22 ноября 2015 11:50 -

Хз. У меня работает:
var_dump(preg_replace_callback(
            "'\\[num\\](.*?)\\[/num\\]'si",
            create_function(
                '$matches',
                'var_dump($matches[1]); return \'\';'
            ),
            'test[num]123[/num]test'));


Ковыряйся в рег выражении, а не в коде

Благодарность принимаю тут Связь

prpobed5
Юзер

prpobed5 - 22 ноября 2015 11:50 -

Подскажите, пожалуйста, если анонимные функции работают только с 5.3, как корректно выполнить эту же задачу под php 5.2.17 ?

nowheremany
Эксперт

nowheremany - 22 ноября 2015 12:04 -

Специально проверил мой код на 5.2 - все работает. create_function все таки в 4 версии появился. Так что вместо preg_replace c e можно юзать этот код

Благодарность принимаю тут Связь

nowheremany
Эксперт

nowheremany - 22 ноября 2015 12:37 -

По сабжу: У меня работает такое
var_dump(preg_replace_callback(
            "#\.\s([a-zа-я]{1})#si",
            create_function(
                '$m',
                'return strtoupper($m[0]);'
            ),
            'слово1 слово2 слово3. Слово4. cлово5. cлово6'));

Благодарность принимаю тут Связь

atlantgroup
Юзер

atlantgroup - 22 ноября 2015 12:40 -

Думаю, что регулярка не зависит от версии PHP. Может проблема в том что в теле функции находятся еще функции? Хотя судя по
var_dump(preg_replace_callback(
            "'\\[num\\](.*?)\\[/num\\]'si",
            create_function(
                '$matches',
                'var_dump($matches[1]); return \'\';'
            ),
            'test[num]123[/num]test'));
нет!

atlantgroup
Юзер

atlantgroup - 22 ноября 2015 13:39 -

Нужно попробовать код для обработки ошибок добавив в скрипт
set_error_handler(create_function('$c, $m, $f, $l', 'if ($c === E_NOTICE) {echo 'This is notice: '.$m} else {throw new MyException($m, $c, $f, $l);}'), E_ALL);

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх