Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数调用放置_Php - Fatal编程技术网

PHP函数调用放置

PHP函数调用放置,php,Php,考虑一下这个片段: function f() { return 'hi'; } echo f(); echo f(); function f() { return 'hi'; } 与此片段相比: function f() { return 'hi'; } echo f(); echo f(); function f() { return 'hi'; } 当我运行脚本时,它们都会产生相同的结果。太好了 但我的问题是(我在任何搜索中都找不到好的答案或引

考虑一下这个片段:

function f() {
    return 'hi';
}

echo f();
echo f();

function f() {
    return 'hi';
}
与此片段相比:

function f() {
    return 'hi';
}

echo f();
echo f();

function f() {
    return 'hi';
}
当我运行脚本时,它们都会产生相同的结果。太好了

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


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

无论您在何处定义函数,在何处调用函数。因为据我所知,PHP服务器应用程序首先读取整个页面,然后执行它

来自:

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

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

作为观察,如果您可以选择在之前或之后声明函数,那么在使用函数之前声明它将是常识

注意:以下代码将给出一个致命错误,因为函数将仅在运行时定义

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

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

这是PHP中一个严重的问题


这有助于想象include类似于将另一个文件中的内容复制/粘贴到代码中。但只有当它们在代码中运行时才会发生这种情况。这意味着它们可以是动态的,并且基于运行的代码。但这也意味着它们不能预先处理和链接。

我发现先定义我的函数,然后调用它们是一种很好的做法,但只要它们在那里,放在哪里并不重要;)


此外,我喜欢根据使用情况,将我的函数分离到不同的php文件中,以便进行组织:)

编译器步骤如下:

  • 将字符序列转换为标记
  • 分析标记以确定语法结构
  • 根据分析结果生成字节码
因此,理解这一点最简单的方法是,脚本不是多线程的,这并不意味着它是在一行执行中处理的

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函数和类)是先加载的,它们将所有用户定义的作用域移动到本机实现之后再加载


执行开始时加载了。

据我所知,在某些情况下,这不起作用(让我们等待PHP专家的回答…。@delnan函数是有条件定义的。看看我的答案。是的……我真的很想知道解析引擎是不是就是这样运作的。我对上师的评论也很好奇。自己测试有那么难吗?要将这个代码示例放入php文件并运行它,他测试了它。当我运行脚本时,它们都会产生相同的结果。太好了。“他只是担心被人嘲笑而已。”上校:用其他语言说,是的。但是PHP有很多怪癖,所以尽管他的例子有效(他自己测试过),但在一些模糊的情况下,类似的东西可能不起作用。或者整个功能都被弃用了。这是一种非常愚蠢的提问方式。一个人可以生成数千个。“我应该使用
进行连接,还是将其替换为
+
?”“引用不会被弃用吗?”等等。每个问题都应该至少有一点理由,不是完全凭空而来的。我认为《弹片上校》需要一个很好的解释……没有抓住PHP手册中的那一段……它回答了我的问题……你给出了一个有趣的if()语句。你能解释一下if(1)的意义和目的吗?谢谢(以前似乎从来没有这样做过——我喜欢一直学习新东西。)我把它放在if中,以演示有条件定义的函数的不同行为。即使代码似乎与示例B等效,但通过将函数声明放在if中,当脚本到达if时,而不是在脚本启动之前(在其他情况下)确定要声明它。我真正好奇的是if(1)的意义。。。它是“普遍真理”子句的等价物,还是“1”表示“运行时”。。。我以前从未见过if()语句。@DrDOT:
1
总是计算为true,因此
if
语句的块总是被执行(没有其他“隐藏”含义)。这个构造本身是无用的,但有助于证明这里条件定义的意义。答:他确实运行了它。B:他不是在问这是否行得通。C:这是一个很好的问题,因为它暴露了PHP中的一个大难题。D:你应该学会读懂别人说的话,不要再做一个傻子了。@Salspanel上校:你的评论可能有道理,也可能没有道理,但张贴两次肯定是不必要的。恕我直言,上校,你不是有更好的事要做吗