【问题标题】:Cannot redeclare function previously declared php无法重新声明以前声明的函数 php
【发布时间】:2014-08-30 10:04:04
【问题描述】:

我遇到了“无法重新声明”错误,我不知道如何解决它。所以我在下面的 php 文件中有一些函数。现在这些函数遍历数据数组。

我想我已经推测问题在于我在 foreach 循环中一遍又一遍地循环该函数,而问题是它的 foreach 循环。似乎它已经在第一次将函数写入内存,然后由于某种原因它不喜欢再次被唤起。

感谢您的帮助。

P.S 我在这个问题上看到了许多类似的帖子,例如Fatal error: Cannot redeclare,但这似乎不起作用。

<?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 parsing loops


    【解决方案1】:

    错误说明了一切。您有重复的 modifyData()parseText 函数。

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

    【讨论】:

    • 对不起,我刚刚明白了,从原始文件复制到 stackoverflow 是一个错误。不存在于实际文件中。我会修复帖子。我很抱歉。
    【解决方案2】:

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

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

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

    这种行为似乎违反直觉,但这就是它目前的工作方式。 RFC 介绍了真正的嵌套函数,其中还列出了该问题的几种解决方法。

    【讨论】:

    • 谢谢!这正是我一直在寻找的。 PHP 不允许嵌套函数的任何特殊原因?好像很有用。
    • 为什么 PHP 会将嵌套函数读取为全局函数?这对我来说似乎并不直观。
    猜你喜欢
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多