我上个月问a question关于PHP在一个包含文件中调用函数的问题,该文件在后来的包含文件中定义。在将ASP站点转换为PHP时会出现此问题。我现在看到问题再次发生。似乎Javascript和PHP在包含文件中处理函数定义的方式非常不同。
(编辑:我在这里完全是在谈论服务器端脚本,而不是客户端。)
#include
d中定义了一个函数,就可以在一个#include
d文件中调用该函数。include()
d中定义一个函数。这表明Javascript和PHP在操作上有很大的不同,我在任何地方都没有发现过。看来Javascript会在继续执行之前先编译所有包含的文件,而PHP在继续进行下一个包含文件之前会编译并执行每个包含文件。
在user-defined functions上的PHP手册页上指出:“在引用函数之前不需要定义它们,除非有条件地定义了函数”。似乎还应该说:“并且除非在不同的include文件中定义和调用了该函数”。 include()的手册页也未解决此问题。
在Javascript中,我必须从战略上考虑在最早的包含文件中定义重要变量,以便可以在需要时使用它们,但是可以在任何包含文件中定义函数并在需要时使用它们。但是在PHP中,似乎我需要在定义函数的地方应用这种战略思维。
似乎,如果我对我在这里写的内容是正确的,那么Javascript和PHP之间的确是一个非常重要的区别,应该之前就已经写过。那我错了,我误会了吗?
答案 0 :(得分:0)
是的,PHP和Java脚本之间存在很大差异。
在PHP中,函数是一种特殊的东西。功能是全局的;如果某个函数在 somewhere 中曾经被声明过一次,则可以从 wherewhere 中对其进行调用。在运行时执行function foo() ...
语句时会声明一个函数(这就是有条件声明的函数有点特殊的原因)。函数具有一个全局唯一名称;您不能重新声明具有相同名称的函数。函数不能像普通值或变量那样对待,例如它们无法被传递。
*这里令人困惑的部分是,function ...
声明也可能在解析时被解析和评估 ,这是运行时之前的步骤。在解析步骤中,对无条件函数声明进行评估,从而导致这些函数在“声明它们之前”在运行时可用。对于需要在运行时进行评估的任何事物,例如include
语句,那当然是行不通的。
在Javascript函数中,只是分配给变量的值。函数具有与变量相同的作用域规则。函数的行为与普通值相同,例如它们可以像其他任何值一样传递。函数只是可调用值。