Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Почему код обработки строки не работает на php 5.2.17 но работает на 5.3?

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


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

вопрос
Добрый день! Подскажите , пожалуйста, почему код обработки строки (делающий заглавной букву после точки), который работает на 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
2

72 | 9

aios - 21 ноября 2015 11:44 - Эксперт

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

Gameer
226

1124 | 396

Gameer - 21 ноября 2015 12:11 - Эксперт

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

Истина в противоречии.​

gor.nizon
25 | 7

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

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

atlantgroup
3

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

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

nowheremany
192

1659 | 1292

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
25

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

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

nowheremany
192

1659 | 1292

nowheremany - 22 ноября 2015 12:04 - Эксперт

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

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

nowheremany
192

1659 | 1292

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
3

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
3

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);

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

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