php 中函数内的函数:错误:无法重新声明
我有这个 php 脚本:
function hoeveelzijner ($jaar, $id)
{
function hoeveelhoeveel($beginstamp, $endstamp, $id)
{
$dates = mysql_query('SELECT v_date FROM visitors WHERE id="'.$id.'" AND v_date<"'.$endstamp.'" AND v_date>"'.$beginstamp.'"');
return mysql_num_rows($dates);
}
$i = 1;
while ($i < 13)
{
$hoeveel[$i-1] = hoeveelhoeveel(mktime(0, 0, 0, $i, 1, $jaar),mktime(0, 0, 0, $i, cal_days_in_month(CAL_GREGORIAN,$i,$jaar),$jaar),$id);
$i = $i+1;
}
return $hoeveel;
}
当我把它放在它下面时,它工作得很好:
$values = hoeveelzijner(2005, 1);
但是,当我执行两次时,例如:
$values = hoeveelzijner(2005, 1);
$test = hoeveelzijner(2000, 4);
我收到此错误: 致命错误:无法重新声明 hoeveelhoeveel() (之前在...中声明) 69)在...第69行。
有人知道我做错了什么吗?如果我只能使用一次函数,它有点破坏了使用函数的目的...
额外信息:我不包含任何其他文件,也不在脚本中的其他位置重新声明该函数。
多谢!
I have this php script:
function hoeveelzijner ($jaar, $id)
{
function hoeveelhoeveel($beginstamp, $endstamp, $id)
{
$dates = mysql_query('SELECT v_date FROM visitors WHERE id="'.$id.'" AND v_date<"'.$endstamp.'" AND v_date>"'.$beginstamp.'"');
return mysql_num_rows($dates);
}
$i = 1;
while ($i < 13)
{
$hoeveel[$i-1] = hoeveelhoeveel(mktime(0, 0, 0, $i, 1, $jaar),mktime(0, 0, 0, $i, cal_days_in_month(CAL_GREGORIAN,$i,$jaar),$jaar),$id);
$i = $i+1;
}
return $hoeveel;
}
When I put this beneath it, it works just fine:
$values = hoeveelzijner(2005, 1);
However, when I do it twice, for example:
$values = hoeveelzijner(2005, 1);
$test = hoeveelzijner(2000, 4);
I get this error: Fatal error: Cannot redeclare hoeveelhoeveel() (previously declared in ...:69) in ... on line 69.
Anyone knows what I am doing wrong? It kinda destroys the purpose of using functions if I can only use it once...
Extra info: I do not include any other files, nor do I redeclare the function somewhere else in the script.
Thanks a lot!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您不能仅使用一次;您只能声明一次。每次使用函数
hoeveelzijner
时,都会声明函数hoeveelhoeveel
。如果你多次调用它,你就会重新声明它,这是被禁止的。您有两个选择:第一个是将函数定义放在包含函数之外。该函数将在第一次解析文件时声明,然后重复使用。如果您想将函数定义限制在特定范围内(原则上是个好主意),您可以使用 PHP 5.3 中引入的匿名函数语法:
然后您可以将该函数用作
$hoeveelhoeveel(...)< /代码>。
You can't only use it once; you can only declare it once. Every time the function
hoeveelzijner
is used, the functionhoeveelhoeveel
is declared. If you call it more than once, you'll redeclare it, which is forbidden.You have two options: the first is to take the function definition outside the containing function. The function will be declared when the file is first parsed, then used repeatedly. If you want to restrict the function definition to a particular scope (a good idea in principle), you can use the anonymous function syntax introduced in PHP 5.3:
You can then use the function as
$hoeveelhoeveel(...)
.尽管 PHP 允许您在任何地方声明函数,但我认为您所做的并不被认为是最佳实践。
对于大多数人来说,这看起来是错误的。
您应该只在父函数之外声明该函数。
或者,您可以在内部函数周围添加一个
function_exists()
,尽管我再次只在父函数外部声明内部函数。也许甚至会为此开设一堂课。
Although PHP let's you declare a function anywhere I think what you are doing is not considered best practice.
For most people it just look wrong.
You should just declare the function outside the parent function.
Alternatively you could add a
function_exists()
around the inner function, although again I would just declare the inner function outside the parent function.Are perhaps even make a class for it.
您不能再次声明它,特别是当该函数多次调用它时。这是一个应该有效的简单更改。
然后,如果需要,您也可以在其他函数中以类似的方式调用任一函数。
You can't declare it again, especially if the function calls it more than once. Here's a simple change that should work.
Then you can call either function in a similar way in other functions too, if needed be.