假设没有字节缓存。
{&}之前是否会解析my_func
b包括在内,还是在?
$x=my_func();
//a.php and b.php are **very** heavy scripts
include ('a.php');
include ('b.php');
//my_func makes the browser use it's cached version of the page.
function my_func(){
//send caching headers
//header(....);
exit;
}
答案 0 :(得分:10)
是的,在执行包含之前将调用my_func。它们实际上是一种“运行时”机制,而不是解析时间。您甚至可以通过将它们包装在流量控制中来有条件地包括在内。
答案 1 :(得分:1)
你为什么不试试?
例如,您可以拥有一个名为temp.php
的第一个文件,其中包含以下内容:
<?php
$a = my_func();
include 'temp-2.php';
function my_func() {
die;
}
第二个文件temp-2.php
包含此内容:
<?php
sleep(5);
当您从网络浏览器调用temp.php
时,页面加载需要多长时间?几乎是瞬间的?还是需要5秒钟?
在第一种情况下,在包含temp-2.php
之前调用该函数。
...并且,在尝试之后:它只需要一瞬间 - 这意味着当函数中存在骰子或退出时,不包括第二个文件。
评论后编辑:哦,对不起,我没有真正理解这个问题,我想: - (
以下是另一种尝试:temp.php
仍包含此内容:
<?php
$a = my_func();
include 'temp-2.php';
function my_func() {
die;
}
但是temp-2.php
文件现在只包含:
<?php
,
如果PHP尝试解析此文件,那么,是的,会给你一个解析错误。
如果你从你的问题中调用temp.php
,它似乎没有任何问题:没有显示任何内容,也没有解析错误。
现在,如果您对die
功能中的“my_func
”行发表评论,并尝试在浏览器中再次呼叫temp.php
,则可获得:
Parse error: syntax error, unexpected ',' in /home/squale/developpement/tests/temp/temp-2.php on line 3
这表示如果PHP尝试解析第二个文件,则会出现Parse错误。
因此,第一次在PHP实际尝试解析第二个文件之前调用了该函数。
希望这个回答你的问题更好,这一次: - )
答案 2 :(得分:0)
基本上订购是正确的。考虑:
a.php只会:
<?php echo "A\n"; ?>
b.php:
<?php echo "B\n"; ?>
c.php:
<?php
my_func();
include 'a.php';
include 'b.php';
function my_func() {
echo "C\n";
}
?>
输出将是:
C
A
B
但是将c.php改为:
<?php
my_func();
include 'a.php';
function my_func() {
include 'b.php';
echo "C\n";
}
?>
,输出变为:
B
C
A