为什么将一个函数定义为一个以上的语句?

zvi

我在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么一个的StackOverflowError被抛出,当代码是一个尝试,catch语句?

为什么要给If语句起一个名字?

当自己创建一个类的实例时,为什么不执行构造函数中的语句?

为什么将\ 0定义为C中char数组的第一个元素?

为什么不能在另一个函数中定义一个函数?

为什么“导入”是一个语句而“重新加载”是一个函数?

mysqli:为什么我需要一个“ if”语句来创建一个表?

为什么此定义返回一个函数?

为什么每个STL容器都有一个定义为成员函数的交换函数?

为什么python的__init__函数没有返回语句,即使它是一个函数

为什么将静态对象作为参数传递给另一个类的构造函数时为null

为什么同一个函数定义在一个类中的执行时间要慢10倍以上?

为什么在C中用一个参数定义一个没有参数的函数?

为什么两个if语句不能在一个函数中起作用?

为什么Prolog将一个自由变量统一为另一个自由变量?

为什么我从我的函数中得到了一个重要的cout语句?

在一个声明语句中定义函数和变量

将一个引用定义为另一个引用是什么意思

为什么在调用另一个函数时不能将一个函数定义为参数?

为什么一个 php 语句有效而另一个无效?

为什么这应该是一个 while 语句而不是一个 if 语句?

为什么 VS 为我的函数定义了一个宏?

为什么一个函数需要一个包含自身作为参数的类而不是一个定义的字符串?

为什么变量不是在同一个函数中定义的,而是在不同的 if/else 语句中定义的?

为什么 IF 语句遍历所有 AND 条件,即使第一个为 false

为什么这个 if 语句给我一个 ValueError?

if 语句只调用一个函数,为什么?

为什么 if 语句忽略第一个 if?

为什么 doc.data() 在这个 if 语句中不是一个函数?