Cat*_*one 17 php if-statement function
我可以在PHP结构中放入PHP中的函数吗?像这样:
<?php
if(true){
function HelloWorld(){
echo "Hello World!!!";
}
HelloWorld();
}
?>
Run Code Online (Sandbox Code Playgroud)
因为我已经尝试过并且有效,但我不知道它是否正确.谢谢
Joh*_*ker 16
这是完全合法的 - 它只是在if语句块中定义函数.这就是说,相当为什么你会想这样做是有点神秘.
值得注意的是,此函数将在全局范围内可用(即:在if语句块之外),如...
PHP中的所有函数和类都具有全局范围 - 即使它们是在内部定义的,也可以在函数外部调用它们,反之亦然.
有关更多信息,请参阅PHP 用户定义的函数手册页.
正如middaparka所说,这是完全合法的,但就使用它而言,您可能希望在声明之前检查函数是否存在:
if (!function_exists("foo"))
{
function foo()
{
return "bar";
}
}
Run Code Online (Sandbox Code Playgroud)
我想在这里添加一个答案,因为其他答案中没有解决一个警告。
根据我在 5.3 中的测试,if结构内部定义的函数似乎是在运行时定义的,而不是像其他函数一样在编译时定义。
例如,在条件块之外,这样:
foo();
function foo(){
echo 'foo!';
}
Run Code Online (Sandbox Code Playgroud)
工作正常,因为该函数是在编译时定义并在运行时执行的。但在条件块内定义函数之前调用该函数:
if(1){
foo(); // Call to undefined function!
function foo(){
echo 'foo!';
}
}
Run Code Online (Sandbox Code Playgroud)
call to undefined function至少从 5.3 版本开始会产生错误。
但是在调用函数之前在 if 块中定义该函数是有效的:
if(1){
function foo(){
echo 'foo!';
}
foo(); // No errors, since function is defined!
}
Run Code Online (Sandbox Code Playgroud)
因此,在条件内部定义函数时需要注意一个主要问题:必须在调用函数之前在代码中定义该函数,因为条件函数似乎不会在编译时定义。
OP 还询问了性能。如果条件函数是在运行时定义的,而不是像大多数其他函数一样在编译时定义的,那么该函数将无法受益于 OpCode 缓存等性能增强器,根据情况,这可能会减慢应用程序的速度。例如,如果您的主 php 文件如下所示:
if($IsLoggedIn){
// include files/functions and bootstrap here...
}
Run Code Online (Sandbox Code Playgroud)
那么整个应用程序可能根本无法从 OpCode 缓存中受益。
| 归档时间: |
|
| 查看次数: |
17759 次 |
| 最近记录: |