提问过多次,但是感觉都不是很对
问题如下:
A.PHP包含B.PHP
B.PHP包含C.PHP
那么,此时PHP是如何处理这个包含过程的?
经过我近几个月的实践,发现A.PHP并不是简单的把B.PHP中的“require('C.PHP')”这句代码搬到自己的代码里面,而是好像对B.PHP中的包含有个预处理的过程,但是一直又没有肯定的结果。希望高人能给个肯定的答复!!!

解决方案 »

  1.   

    PHP里的包含,个人认为其实就是将其他的文件的内容拷进来执行,就如一个文档,被拆分为多,最后组合一样
    所以,包含里的变量是可传递的!
    这和模块及函数调用还不一样!对于函数,一般放在包含在首部!如有重复以最后一个为准!
      

  2.   

    寻找过程:
    寻找包含文件的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。例如 include_path 是 .,当前工作目录是 /www/,脚本中要 include 一个 include/a.php 并且在该文件中有一句 include "b.php",则寻找 b.php 的顺序先是 /www/,然后是 /www/include/。如果文件名以 ./ 或者 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。 怎么样包含:
    当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中应被当作 PHP 代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中。来源:PHP手册
      

  3.   

    LS的正解, 我初学PHP时这个东东可做了大量实验
      

  4.   

    先去找本文件相对目录,然后去找php.ini里面设置的include_path.我测过的.
      

  5.   

    解释的很详细,但是还是不懂。
    当一个文件被包含时,语法解析器在目标文件的开头脱离   PHP   模式并进入   HTML   模式,到文件结尾处恢复。由于此原因,目标文件中应被当作   PHP   代码执行的任何代码都必须被包括在有效的   PHP   起始和结束标记之中。 这句话哪个能帮忙翻译一下??
      

  6.   


    if (!$Dir_Root)
    {
    $Dir_Root = str_ireplace(array(basename(__FILE__),'\\'),
    array('','/'),
    __FILE__) ;
    }
    define('_Dir_Root',$Dir_Root);在命名空间出来之前我一直这样做.
    __Dir_Root为根目录绝对路径.
    调用文件时使用它就行了.
    当然也会定义出其他路径.
    Php  include 的路径是相对于当前执行脚本而言的,所以多级包含经常会出错.