1、把稳这两个都是措辞构造不是方法,与echo、print、isset()、empty()、unset()等类似都是措辞构造不是函数!
!
!
!
!
2、include与require都是引入外部文件到当前高下文环境,但是他们有一些差异:
一、被包含文件先按参数给出的路径探求,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录探求。如果在 include_path 下没找到该文件则 include 末了才在调用脚本文件所在的目录和当前事情目录下探求。如果末了仍未找到文件则 include 构造会发出一条警告;这一点和 require 不同,后者会发出一个致命缺点。(在这点上include_once与require_once类似,但是他们在导入一个已导入的文件都会忽略,但是他们在引入文件时会判断是否引入会降落性能)

二、关于引入的文件:当一个文件被包含时,个中所包含的代码继续了 include、require 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局浸染域。
EG1:
vars.php
<?php
$color = 'green';
$fruit = 'apple';
?>
test.php
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?>
如果 include 涌现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得犹如它们是在该函数内部定义的一样。以是它将遵照该函数的变量范围。此规则的一个例外是魔术常量,它们是在发生包含之前就已被解析器处理的。
3、include返回值:
处理返回值:在失落败时 include 返回 FALSE 并且发出警告。成功的包含则返回 1,除非在包含文件中其余给出了返回值。可以在被包括的文件中利用 return 语句来终止该文件中程序的实行并返回调用它的脚本。同样也可以从被包含的文件中返回值。可以像普通函数一样得到 include 调用的返回值。不过这在包含远程文件时却弗成,除非远程文件的输出具有合法的 PHP 开始和结束标记(犹如任何本地文件一样)。可以在标记内定义所需的变量,该变量在文件被包含的位置之后就可用了。由于 include 是一个分外的措辞构造,其参数不须要括号。在比较其返回值时要把稳。
EG2:
<?php
// won't work, evaluated as include(('vars.php') == TRUE), i.e. include('')
if (include('vars.php') == TRUE) {
echo 'OK';
}
// works
if ((include 'vars.php') == TRUE) {
echo 'OK';
}
讲解:
$bar 的值为 1 是由于 include 成功运行了。把稳以上例子中的差异。第一个在被包含的文件中用了 return 而另一个没有。如果文件不能被包含,则返回 FALSE 并发出一个 E_WARNING 警告。如果在包含文件中定义有函数,这些函数不管是在 return 之前还是之后定义的,都可以独立在主文件中利用。如果文件被包含两次,PHP 5 发出致命缺点由于函数已经被定义,但是 PHP 4 不会对在 return 之后定义的函数报错。推举用 include_once 而不是检讨文件是否已包含并在包含文件中有条件返回.
3、include引入文件的处理:(这点很主要)
当一个文件被包含时,语法解析器在目标文件的开头分开 PHP 模式并进入 HTML 模式,到文件结尾处规复。由于此缘故原由,目标文件中须要作为 PHP 代码实行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中。并且当实行完成之后直接加入到缓冲区,将被导入的文件中的变量加入到当前的浸染域变量链上。
EG3:
//t1.php 文件内容
1234<?php $name="PQS"; ?>5678<?php return 1; ?>9
//t2.php文件内容
<?php
include "t1.php";
echo $name;
//开始实行t2.php
会输出:12345678PQS
案例解析:
首先当include "t1.php";文件时PHP解析器分开PHP模式进入HTML模式开始解析,由于HTML模式是将内容直接加入到缓冲区,以是没有标签1234会被首先加入到缓冲区,然后在实行<?php $name="PQS"; ?>这里就会把$name这个变量加入到t2.php的include "t1.php"这句代码的上线文变量浸染域中。然后接着在回到HTM模式将5678加入到缓冲区,接下来碰着<?php return 1;?>就开始进入PHP模式进行实行代码,由于include是接管return的,以是当这里return 1之后全体文件的加载就到此处结束了, 返回到t2的代码实行域中了,这也是为什么末了没有输出9的缘故原由。
举个例子证明PHP将文件输入到缓冲区:
//t3.php
1234567
//t4.php
<?php
$string = get_include_contents('t3.php');
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
return false;
}
echo $string;
//实行t4.php
1234567
案例剖析:
函数get_include_contents($filename)
在include之前开启缓冲区,当include将t3.php文件引入后就利用ob_get_contents()方法获取缓冲区数据赋值给$contents,然后利用ob_end_clean将缓冲区数据丢弃末了将$contents返回,末了输出返回值便是t3.php在经由php运行的值。
4、include支持引入URL:
如果“URL include wrappers”在 PHP 中被激活,可以用 URL(通过 HTTP 或者其它支持的封装协议——见支持的协议和封装协议)而不是本地文件来指定要被包含的文件。如果目标做事器将目标文件作为 PHP 代码阐明,则可以用适用于 HTTP GET 的 URL 要求字符串来向被包括的文件通报变量。严格的说这和包含一个文件并继续父文件的变量空间并不是一回事;该脚本文件实际上已经在远程做事器上运行了,而本地脚本则包括了其结果。
<?php
/ This example assumes that www.example.com is configured to parse .php
files and not .txt files. Also, 'Works' here means that the variables
$foo and $bar are available within the included file. /
// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';
// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';
// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Works.
include 'file.php'; // Works.
此案例是PHP官网案例,如果不懂之处请移步值PHP官网include章节!