PHP中导入文件有两种语言结构:include和require。
1.注意,两者都是语言结构,不是方法,类似于echo,print,isset(),empty(),unset()等等。!!!!
2.两者都包括并要求将外部文件引入当前上下文,但它们有一些不同之处:
首先,根据参数给出的路径搜索包含的文件。如果没有给出目录(只有文件名),则根据include_path指定的目录进行搜索。如果在include_path下找不到该文件,将在调用脚本文件所在的目录和当前工作目录下找到include。如果最后没有找到文件,include结构会发出警告;这与require不同,require会发出致命错误。(在这方面,include_once和require_once类似,但是他们在导入导入的文件时会忽略它,但是在导入文件时会判断它是否会降低性能。)
二、关于导入的文件:当包含一个文件时,其中包含的代码继承了include和require所在行的变量范围。从这里开始,在这一行的调用文件中可用的任何变量在被调用的文件中也是可用的。但是,包含文件中定义的所有函数和类都具有全局范围。
EG1:
vars.php
& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
$ color = & # 39绿色& # 39;;
$ fruit = & # 39苹果& # 39;;
?& gt
test.php
& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
回声& # 34;一个$ color $水果& # 34;;// A
包括& # 39;vars.php & # 39;
回声& # 34;一个$ color $水果& # 34;;//一个绿色的苹果
?& gt
如果include出现在调用文件的函数中,则被调用文件中包含的所有代码的行为将如同它们是在函数中定义的一样。所以它会跟随函数的变量范围。这个规则的一个例外是幻常数,它在包含发生之前由解析器处理。
3.包含的返回值:
处理返回值:include返回FALSE,并在失败时发出警告。成功的包含将返回1,除非包含文件中给出了返回值。您可以在包含的文件中使用return语句来终止文件中程序的执行,并返回调用它的脚本。您也可以从包含的文件中返回值。您可以像普通函数一样获得include调用的返回值。然而,当包含远程文件时,这是做不到的,除非远程文件的输出有合法的PHP开始和结束标记(像任何本地文件一样)。您可以在标记中定义所需的变量,该变量在包含文件的位置之后可用。因为include是一种特殊的语言结构,所以它的参数不需要括号。比较它们的返回值时要注意。
EG2:
& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
//韩元& # 39;测试工作,评估为包含((& # 39;vars.php & # 39)== TRUE),即包含(& # 39;')
如果(包括(& # 39;vars.php & # 39)==真){
回声& # 39;好& # 39;;
}
//作品
如果((包含& # 39;vars.php & # 39)==真){
回声& # 39;好& # 39;;
}
解释:
$bar的值为1,因为include运行成功。注意上面例子中的不同之处。第一个在包含的文件中使用了return,另一个没有。如果不能包含该文件,它将返回FALSE并发出E_WARNING警告。如果包含文件中定义了函数,这些函数可以在主文件中独立使用,不管它们是在返回之前还是之后定义的。如果文件被包含两次,PHP 5会发出一个致命错误,因为函数已经被定义了,但是PHP 4不会向返回后定义的函数报错。建议使用include_once,而不是检查文件是否包含在内,并在包含的文件中有条件地返回。
3.包括导入文件的处理:(这非常重要)
当包含一个文件时,解析器在目标文件的开头离开PHP模式,进入HTML模式,并在文件的结尾重新开始。因此,目标文件中任何需要作为PHP代码执行的代码都必须包含在有效的PHP开始和结束标记中。并且执行完成后直接加入缓冲区,导入文件中的变量加入当前作用域变量链。
EG3:
//t1.php文件内容
1234 & lt?php $ name = & # 34PQS & # 34;;?& gt5678 & lt?php返回1;?& gt九
//t2.php文件内容
& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
包括& # 34;t1.php & # 34;
echo $ name
//开始t2.php的实现。
会输出:12345678PQS
案例分析:
首先,当包含& # 34;t1.php & # 34;文件,PHP解析器离开PHP模式,进入HTML模式开始解析。因为HTML模式直接将内容添加到缓冲区,所以不会先将标签1234添加到缓冲区,然后在执行后添加
我们举个例子证明PHP把文件输入缓冲区:
//t3.php
1234567
//t4.php
& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
$ string = get _ include _ contents(& # 39;t3.php & # 39);
函数get _ include _ contents($ filename){
if (is_file($filename)) {
ob _ start();
包括$ filename
$ contents = ob _ get _ contents();
ob _ end _ clean();
返回$ contents
}
返回false
}
echo $ string
//实现t4.php
1234567
案例研究:
函数get_include_contents($filename)
在包含之前打开缓冲区。当include引入t3.php文件时,使用ob_get_contents()方法获取缓冲区数据并将其赋给$contents。然后使用ob_end_clean丢弃缓冲区数据,最后返回$contents。最后,输出返回值是t3.php通过php运行的值。
4.包含支持导入URL:
如果在PHP中激活了“URL include wrappers ”,则可以使用URL(通过HTTP或其他支持的封装协议——参见支持的协议和封装协议)代替本地文件来指定要包含的文件。如果目标服务器将目标文件解释为PHP代码,它可以用适合HTTP GET的URL请求字符串将变量传递给包含的文件。严格来说,这和包含文件并继承父文件的变量空是不一样的;脚本文件实际上已经在远程服务器上运行,本地脚本包含了它的结果。
& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
/*此示例假设www.example.com被配置为解析。php *
*文件和非文件。txt文件。还有,& # 39;作品& # 39;这里意味着变量*
* $foo和$bar在包含的文件中可用。*/
//韩元& # 39;t工作;file.txt不是& # 39;t由www.example.com作为PHP处理
包括& # 39;http://www.example.com/file.txt? foo = 1 & bar = 2 & # 39;;
//韩元& # 39;t工作;查找名为& # 39;file.php?foo = 1 & bar = 2 & # 39在……上
//本地文件系统。
包括& # 39;file.php?foo = 1 & bar = 2 & # 39;
//起作用。
包括& # 39;http://www.example.com/file.php? foo = 1 & bar = 2 & # 39;;
$ foo = 1;
$ bar = 2;
包括& # 39;file.txt & # 39;//起作用。
包括& # 39;file.php & # 39;//起作用。
这个案例是PHP官网的一个案例。如果不明白,请移步PHP官网的include版块!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。