首先在PHP,包括或解析中发生了什么?

时间:2009-09-26 15:04:10

标签: php performance

假设没有字节缓存。

{&}之前是否会解析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;
}

3 个答案:

答案 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