我在PHP中看到了一个奇怪的行为。请参阅以下示例:
<?php
if (true)
function my_function(){
echo "here";
}
my_function();
?>
运行此命令将产生错误:
解析错误:语法错误,意外的“ my_function”(T_STRING),第4行应为“(”
我发现此错误的解决方法是添加括号:
<?php
if (true) {
function my_function(){
echo "here";
}
}
my_function();
?>
此代码将正常运行。
你能解释一下吗?为什么将一个函数定义为一个以上的语句?
你问:
为什么将一个函数定义为一个以上的语句?
没有。定义函数不是语句。
从PHP手册:
语句可以是赋值,函数调用,循环,条件语句,甚至是什么都不做的语句(空语句)。语句通常以分号结尾。此外,可以通过使用花括号将一组语句封装在一起,将语句分为一组语句组。语句组本身也是一个语句。
一条if
语句后必须再有一条语句!让我们简化您的问题,看看上面定义的此类语句的一些示例:
if(1)
{} // A statement-group is a statement by itself as well.
if(1)
; // an empty statement
if(1)
$a=1; // an assignment
if(1)
print(1); // a function call
if(1)
while(0){} // a loop
if(1)
if(0); // a conditional statement
函数或类的定义不是官方PHP定义的声明。未声明不能在需要声明的上下文中使用。
PHP 5.3引入了匿名函数(Lambda函数和闭包)的概念。匿名函数定义是一条语句。
匿名函数的语法与普通函数的定义几乎相同,但是不提供名称。换句话说,关键字function
后面必须紧跟()
空格。它也必须以分号结尾。
// This is valid:
if(1)
function (){};
//This is invalid:
if(1)
function a(){}
// ^
// syntax error, unexpected 'a' (T_STRING), expecting '('
这就是为什么错误消息告诉您该函数的名称意外的原因。PHP需要一个语句,当遇到function
关键字时,它希望您正在定义一个匿名函数。匿名函数没有名称,因此名称部分是意外的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句