无法重新声明先前声明的函数php
我遇到了“无法重新声明”错误,我无法弄清楚如何解决它。所以我在下面的php文件中有几个函数。现在这些函数遍历数据数组。无法重新声明先前声明的函数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不支持嵌套函数。虽然您可以在技术上在函数内声明的函数:
function modifyPost($data)
{
function addSymbol($data, $field1, $field2)
内在功能成为全球性的,在第二次尝试申报(通过再次调用外部函数)将失败。
这种行为似乎违反直觉,但这是它目前的工作方式。有关于实际嵌套函数的RFC,其中还列出了该问题的几种解决方法。
错误说明了一切。您有重复的modifyData()
& parseText
功能。
删除php文件的上半部分,所以只有其中一个发生。
整个代码搞砸了。 – 2014-08-30 10:16:13
对不起,我刚刚发现,这是从原始文件复制到stackoverflow错误。不存在于acutal文件中。我会解决这个问题。我很抱歉。 – and0rsk 2014-08-30 10:16:14
谢谢!这正是我所期待的。任何特定的原因PHP不允许嵌套函数?这似乎是有用的。 – and0rsk 2014-08-30 12:35:50
为什么PHP将嵌套函数读为全局函数?这对我来说并不直观。 – and0rsk 2014-08-30 12:38:10
@和0rsk:为什么?我不知道,但看到编辑。 – georg 2014-08-30 12:53:51