проблема с return

berkut

Новичок
проблема с return

непонятная штука с return в parseCodes(). Если вместо return $r; поставить echo $r; - то выдают ожидаемый результат, но var_dump(parseCodes(@$_POST['Name'])) выдаёт null
в чём проблема???
PHP:
<?php
function parse($str) {
    $str = str_replace('[p]', '<p>', $str);
    $str = preg_replace('#(\[i\](.+)\[/i\])#', '<i>\\2</i>', $str);
    $str = preg_replace('#(\[b\](.+)\[/b\])#', '<b>\\2</b>', $str);
    $str = preg_replace('#(\[u\](.+)\[/u\])#', '<u>\\2</u>', $str);
    $str = preg_replace('#(\[color=(\d{6})\](.+)\[/color\])#', '<font color=\\2>\\3</font>', $str);
    $str = preg_replace('#(\[img=([a-zA-Z0-9\.\/:]+)\])#', '<img src="\\2">', $str);
    return $str;
}

function parseCodes($str) {
    static $part;
//[ php] & [ /php] -пробелы лишние
    if ((($open = strpos($str, '[ php]')) !== false) && ((($close = strpos($str, '[ /php]', 1)) !== false))) {
        $nonphp = substr($str, 0, $open);
        $php = substr($str, $open+5, $close-$open-5);
        $nonphp = parse($nonphp);
        $php = highlight_string($php, true);
        $part.= $nonphp.$php;
        $rev = substr($str, $close+6);
        parseCodes($rev);
    }
    else {
        $r = $part.parse($str);
        return $r;
    }
}

var_dump( parseCodes(@$_POST['Name']));

?>
<form name="FormName" action="test.php" method="post">
<textarea name="Name" cols=70 rows=10>[ php]kkjjbjb[ /php]</textarea>  <input type="submit" value="Send">
</form>
 

SiMM

Новичок
Re: проблема с return

Автор оригинала: berkut
в чём проблема???
Вернуть параметр return'ом забыл. Тыкать носом - не буду - попробуй найти самостоятельно.
 

berkut

Новичок
SiMM ну будь добр ткнуть меня носом, туда где надо вставить ретурн.
Либо я совсем туплю, либо ты не прав. Ведь если вместо return $r; поставить echo $r; - то всё работает нормально. Ф-ия в любом случае, рекурсивно доходит до "else"
 

SiMM

Новичок
Автор оригинала: berkut
Ведь если вместо return $r; поставить echo $r; - то всё работает нормально
У тебя неправильные пчёлы - вернее, ты echo не туда ставишь, потому и отладить не можешь.
Ф-ия в любом случае, рекурсивно доходит до "else"
Вот и поставь echo после else (а не в функции, которая у тебя вызывается рекурсивно) и убедись, что не прав.
 
Сверху