PHP函数调用放置

时间:2010-12-06 15:44:49

标签: php

请考虑以下代码段:

function f() {
    return 'hi';
}

echo f();

与此片段相关:

echo f();

function f() {
    return 'hi';
}

当我运行脚本时,它们都会产生相同的结果。那很好。

但是我的问题是(我在任何搜索中都找不到好的答案或参考),在定义之前调用函数是否可以(即从脚本文件的顺序解析角度来看)?

如果我将函数调用放在脚本文件中的函数定义块之前,我不想遇到任何问题或弃用。

5 个答案:

答案 0 :(得分:10)

来自Manual

  

之前不需要定义函数   它们被引用,除了a   函数有条件地定义为   如下面的两个例子所示。

在定义函数之前调用(引用)函数的可能性是一个PHP有意的特性,我认为你不必担心它会被弃用。

作为观察,如果您可以选择在之前或之后声明该功能,那么在使用它之前声明它是常识。

注意:以下代码会产生致命错误,因为该函数仅在运行时定义。

<?php
echo helloWorld();
if(1){
    function helloWorld() {
        return 'hello world';
    }
}
?>

答案 1 :(得分:1)

编译器步骤如下:

  • 将一系列字符转换为标记
  • 分析标记以确定语法结构。
  • 根据分析结果生成字节代码

因此,理解这一点的最简单方法仅仅是因为脚本不是多线程的,并不意味着它在一行中执行。

PHP在执行之前将您的整个源代码读入令牌,因为它可以控制令牌的顺序。

以此为例

while(true)
{
    print '*';
}

每一行都是一系列字符,因此PHP会将其解释为

if          #T_IF
            #T_WHITESPACE
(
            #T_WHITESPACE
true        #T_STRING
            #T_WHITESPACE
)
            #T_WHITESPACE
{
            #T_WHITESPACE
print       #T_PRINT
            #T_WHITESPACE
'*';        #T_CONSTANT_ESCAPED_STRING
            #T_WHITESPACE
}

但仅仅因为它被阅读并不意味着它已被执行。

因此,函数位于列表的顶部,这样就可以执行它们,因为已经存在于系统内存中。

我认为这样做的原因是首先加载了PHP的本地库,如PFO,mysql_connect函数和类,并且它们会在本机实现之后移动所有用户定义的作用域。

在执行开始时加载。

答案 2 :(得分:0)

这是一个很好的问题。因为它没有一个非常好的答案。如果有机会,PHP会很好地向后工作。直到没有。例如,如果稍后在尚未加载的包含文件中定义该函数,则不会。 PHP将在代码中包含这些文件,因此在这种情况下您将得到一个未定义错误的函数。

这是PHP中的一个严重问题。

有趣的是,包含就像将其他文件中的内容复制/粘贴到代码中一样。但它只会在代码中运行时才会发生。这意味着它们可以是动态的并且基于正在运行的代码。但这也意味着他们不能事先进行预处理和联系。

答案 3 :(得分:0)

我发现首先定义我的函数并稍后调用它们是一个好习惯,但是只要它们在那里就放在哪里并不重要;)

另外,我喜欢将我的功能分成不同的php文件,具体取决于用途,只是为了组织起来:)

答案 4 :(得分:-1)

无论您在何处定义功能以及呼叫的位置。因为据我所知,PHP服务器应用程序首先读取整个页面然后执行它。

相关问题