无法重新声明以前声明的php函数


Cannot redeclare function previously declared php

我遇到了一个"无法重新声明"错误,我不知道如何修复它。所以我在下面的php文件中有一些函数。现在,这些函数在数据数组上进行迭代。

我想我已经猜到问题是我在foreach循环中一次又一次地循环函数,而foreach循环就是问题所在。它似乎已经写了一个第一次记忆的函数,然后出于某种原因,它不喜欢再次被唤起。

感谢你的帮助。

p.S我在这个问题上看到过很多类似的帖子,比如致命错误:无法重新声明,但这似乎不起作用。

<?php
// *****Code Omitted from Stack**** 

function postHelper($data, $field1, $field2)
{ //TODO Abstract and make sure post Helper  and modify Post can be the same thing.
    $result = array();
    for ($j = 0; $j < count($data); ++$j) { //iterator over array
        if ($field2 == "") {
            $result[$j] = $data[$j][$field1];
        } else {
            return $result[$j] = $data[$j][$field1][$field2];
        }
    }
    return $result;

}
//returns an array with only @ and # values 
function modifyPost($data)
{
//puts symbol @ before read data
    function addSymbol($data, $field1, $field2)
    {
        $info = postHelper($data, $field1, $field2);
        foreach ($info as &$n) {
            $n = '@' . $n;
        }
        print_r($info);
    }

    /*
     Parse texts and returns an array with only @ or # signs used
    */

    function parseText($data)
    {
        $newarr = array();
        $text = postHelper($data, "text", "");
        foreach ($text as &$s) { //separates into words
            $ex = explode(" ", $s);
            foreach ($ex as &$n) { //if text doesnt' begin with '@' or '#' then throw it out.
                if (substr($n, 0, 1) === '@' || strpos($n, '#') !== false) {
                    array_push($newarr, $n . ',');
                }
            }
        }
        return $newarr;
    }
}

foreach ($posts as $entry) {
    if (!function_exists('modifyPost')) {
        $nval = "hello";
        modifyPost($entry);
        $entry['mod_post'] = $nval;
    }
}
?>

编辑:我已经解决了这个错误。原来原来的帖子确实有效。我把命名搞砸了。我会给任何能向我解释为什么打电话需要这样做的人打分。此外,若有其他问题,我会更新帖子。

Php不支持嵌套函数。尽管从技术上讲,您可以在函数中声明一个函数:

function modifyPost($data)
{

    function addSymbol($data, $field1, $field2)

内部函数变为全局函数,第二次尝试声明它(再次调用外部函数)将失败。

这种行为似乎有违直觉,但目前它就是这样运作的。有关于真实嵌套函数的RFC,其中还列出了解决该问题的几种方法。

这个错误说明了一切。您有重复的modifyData()&CCD_ 2起作用。

删除php文件的上半部分,这样每个文件只出现一个。