为什么这个代码有效,因为函数需要在echo语句之前编译?

时间:2014-11-06 20:11:19

标签: php

我对此代码的工作原理感到困惑:

<?php
        echo fix_names("William" , "henry", "gatES");

        function fix_names($n1, $n2, $n3){
            $n1 = ucfirst(strtolower($n1));
            $n2 = ucfirst(strtolower($n2));
            $n3 = ucfirst(strtolower($n3));

            return $n1 . " " . $n2 . " " . $n3;
        }
      ?>

我认为编译器会遍历每一行,但上面的代码使得代码需要首先编译函数,然后返回并处理echo语句。 echo函数不应该在函数之后出现吗?

1 个答案:

答案 0 :(得分:1)

  

我认为编译器会遍历每一行,

这对发生的事情过于简单化。

为了执行你的代码,语句通常从上到下按顺序运行,但正如你所见,函数和类定义的引入使这种天真的描述有缺陷。

在程序代码开始执行之前,定义在某种程度上被解释;因此,它们应该可用 - 范围允许的规则 - 即使是在它们上面找到的程序代码中。

From the PHP manual

  

在引用函数之前不需要定义函数,除非有条件地定义函数,如下面两个示例所示。

进一步的分析需要深入解释如何解释,编译和执行PHP,并且超出了本网站的范围。