为什么PHP中的类函数最后不需要分号?

时间:2013-04-20 03:07:52

标签: php

例如......

public function processRowSet($rowSet, $singleRow = false){
    $resultArray = array();
    while($row = mysql_fetch_assoc($rowSet)){
        array_push($resultArray, $row);
    };

    if ($singleRow === true){
        return $resultArray[0];
    };

    return $resultArray;
}
...and then the next line continues without an issue

当我第一次使用OOP PHP时,我在最后添加分号时出错了,我花了大约一个小时来弄清楚出了什么问题。

4 个答案:

答案 0 :(得分:5)

为什么?

因为PHP编程语言的作者设计了这样的语言。

当你在php中创建一些代码时,会发生以下过​​程:

  1. 预解析器解析您的文件,查找语法错误。
  2. 解析器解析您的文件,查找运行时错误。
  3. 文件内容更改为汇编代码。
  4. 汇编程序代码变为机器代码,然后运行程序。
  5. 编程语言的作者使得解析器允许在冒号后使用分号,这就是为什么允许这样做。 (他们使用括号代替)。

    某些编程语言要求您使用分号,因为解析过程很难实现。

答案 1 :(得分:2)

区别在于语句和表达式:

  • if语句,while语句,函数等是语句,不需要以分号结尾。
  • 实际命令是表达式(即$foo = bar())。独立表达式需要分号,可能因为它们没有大括号来表示表达式结束。

PHP借用了C语言中的这种语法。

答案 2 :(得分:1)

总而言之,在闭块大括号之后你永远不需要分号。您的代码应如下所示:

public function processRowSet($rowSet, $singleRow = false){
    $resultArray = array();
    while($row = mysql_fetch_assoc($rowSet)){
        array_push($resultArray, $row);
    }

    if ($singleRow === true){
        return $resultArray[0];
    }

    return $resultArray;
}

分号本身被视为空语句(什么都不做)。这就是为什么常见的错误就是编写一个循环:

for ($a=0; $a=10; $a++); 
    print $a; 

循环后的分号是无执行命令,它将执行10次,然后打印出“11”。这相当于写作:

for ($a=0; $a=10; $a++) {
    ; // do nothing
}
print $a; 

答案 3 :(得分:0)

许多编程语言不需要结束语句即。 ';'在函数块之后,或任何其他类型的块语句,如if,for,while。我们没有用终结符定义块的结尾,因为块已经被限制在{}中。它取决于语言解析器/编译器如何执行代码。