我有以下php代码:
function mapWordsToOriginal()
{
try
{
$d = array();
function map_FilteredWithOriginal($n, $m)
{
return(array(($n + 1) => ($m + 1)));
}
foreach ($this->wordsArray as $word)
{
array_push($d, array_map(
"map_FilteredWithOriginal",
array_keys(
$this->wordsArray, $word),
array_keys($this->originalText, $word)));
}
for ($i = 0; $i < count($d); $i++)
{
for ($j = 0; $j < count($d[$i]); $j++)
{
$this->mapFilteredWithOriginal +=$d[$i][$j];
}
}
if ($this->debug)
{
print_r($this->mapFilteredWithOriginal);
}
}
catch (Exception $e)
{
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
我几次使用此函数(取决于文本的长度),但是当我第二次使用此代码时:
function map_FilteredWithOriginal($n, $m)
{
return(array(($n + 1) => ($m + 1)));
}
脚本停止了。
我不知道为什么,也没有例外被抓获......
答案 0 :(得分:2)
您应该在函数声明周围添加function_exists() === false
条件,以便在第二次传递时不再声明它。对于它的价值,你通常不应该以嵌套的方式声明函数,除非你真的打算有条件地声明函数(即使用函数来有条件地创建函数)。
在这种情况下,您应该将嵌套函数移到main函数之外。
答案 1 :(得分:0)
您可能收到错误,因为在第二次调用mapWordsToOriginal
时,您将重新声明map_FilteredWithOriginal
。
在这种情况下,没有理由在函数内部定义函数,因为它不会限制范围并使事情变得不那么可读。
如果必须这样定义,可以使用PHP的function_exists
函数仅声明map_FilteredWithOriginal
一次。
答案 2 :(得分:0)
你不能在那里遇到例外。
您的代码会产生致命错误,因为通过多次调用map_FilteredWithOriginal()
来重新声明mapWordsToOriginal()
。
if ( FALSE === function_exists( 'map_FilteredWithOriginal' ) )
{
function map_FilteredWithOriginal( $n, $m )
{
return( array( ( $n + 1 ) => ( $m + 1 ) ) );
}
}
这有助于我思考。
尝试在项目中使用error_reporting()
(仅限开发时间),这样可以更轻松地进行调试。 :)
error_reporting( E_ALL | E_STRICT );
玩得开心。