PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的。echo输出后没有返回值,但print有返回值,当其实行失落败时返回flase。因此可以作为一个普通函数来利用,例如实行下面的代码后变量$r的值将为1。
1$r
=
print
\"大众Hello World\"大众
;
这意味着print可用在一些繁芜的表达式中,而echo则弗成。但是,由于echo语句不哀求返回任何数值,所已在代码中echo语句的运行效率要略微快于print语句。
2.include与require的差异
include()与require()的功能也基本相同(包含),但在用法上也有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如不才面代码中,如果变量$a为真,则将包含文件a.php:
123if
(
$a
){
include
(
\公众a.php\"大众
);
}
而require()则和include()不同,不管$a取何值,下面的代码将把文件a.php包含进文件里:
123if
(
$a
){
require
(
\"大众a.php\公众
);
}
在缺点处理方面,利用include语句,如果发生包含缺点,程序将跳过include语句,虽然会显示缺点信息但是程序还是会连续实行!
但requre却会给你来个致命缺点。
当然,从字面意思上我们也可以理解七分:requre是很强硬的要求、哀求的意思。
3.require_once()和include_once()语句
题外话了,由于长的像,大略require_once()和include_once()语句分别对应于require()和include()语句。require_once() 和include_once()语句紧张用于须要包含多个文件时,可以有效地避免把同一段代码包含进去而涌现函数或变量重复定义的缺点。
4.空字符串('')和NULL的差异
PHP中空字符串和NULL都因此值为0存储的,但是他们的类型并不一样,你可以试一下echo gettype('');和echo gettype(NULL);你会创造他们打印出来的分别是string和NULL,当然还有0也随意马虎稠浊,你可以试试echo gettype(0);打印一下类型,会创造0的类型是integer(整型),可见字符串('')、NULL和0是“等值”但不等类型。
5.isset和 empty的差异
从字面意思上我们就可以明白:empty是判断一个变量是否为“空”,而isset 则是判断一个变量是否已经设置。但是这里有一点绝对要把稳起来:当一个变量值为0,empty 认为这个变量同等于空,即相称于没有设置。比如当我们检测$id 变量的时候,当$id=0 ,用empty和isset来检测变量$id是否已经配置,两都将返回不同的值:empty 认为没有配置,isset 则能够取得 $id 的值,看下边例子:
123$id
=0;
empty
(
$id
)?
print
\"大众我是空的\"大众
:
print
\公众我是$id .\"大众
;
//结果:我是空的
!isset(
$id
)?
print
\"大众我是空的\"大众
:
print
\"大众我是$id .\"大众
;
//结果:我是0
6.==(等)和===(恒等)的差异
回顾上面第四条空字符串(\公众\"大众)和NULL的差异,再来看一个例子:
12''
== NULL;
''
=== NULL;
运行之后你会创造第一个为true,而第二个则为false!
可见==只是比较值是否相等,而===则不但比较值,还会比较类型,更为严格。
7.self :: 和 this-> 的差异
在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须利用操作符::,反之如果被引用的变量或者方法没有被声明成const或者static,那么就必须利用操作符->。
其余,如果从类的内部访问const或者static变量或者方法,那么就必须利用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须利用自引用的$this。
8.strstr() 与 strpos() 的差异
stristr() 不区分大小写 strstr() 区分大小写
函数查找字符串在另一个字符串中第一次涌现的位置。
如果成功,则返回字符串的别的部分(从匹配点)。如果没有找到该字符串,则返回 false。
stripos() 不区分大小写 strpos() 区分大小写
函数返回字符串在另一个字符串中第一次涌现的位置。
如果没有找到该字符串,则返回 false。
经测试证明如果只是纯挚查找判断是否存在则strpos()的实行效率要大于strstr()
9.PHP中 HTTP_HOST 和 SERVER_NAME
相同点:
当知足以下三个条件时,两者会输出相同信息。
1. 做事器为80端口
2. apache的conf中ServerName设置精确
3. HTTP/1.1协议规范
不同点:
1. 常日情形:
_SERVER[\公众HTTP_HOST\公众] 在HTTP/1.1协议规范下,会根据客户真个HTTP要求输出信息。
_SERVER[\"大众SERVER_NAME\"大众] 默认情形下直接输出apache的配置文件httpd.conf中的ServerName值。
2. 当做事器为非80端口时:
_SERVER[\公众HTTP_HOST\"大众] 会输出端口号,例如:mimiz.cn:8080
_SERVER[\公众SERVER_NAME\"大众] 会直接输出ServerName值
因此在这种情形下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT
3. 当配置文件httpd.conf中的ServerName与HTTP/1.0要求的域名不一致时:
httpd.conf配置如下:
ServerName mimiz.cn
ServerAlias www.mimiz.cn
客户端访问域名www.mimiz.cn
_SERVER[\"大众HTTP_HOST\"大众] 输出 www.mimiz.cn
_SERVER[\"大众SERVER_NAME\"大众] 输出 mimiz.cn
以是,在实际程序中,应只管即便利用_SERVER[\公众HTTP_HOST\"大众] ,比较保险和可靠。
如果在端口映射的情形下,并且在内网访问,用“$_SERVER['HTTP_X_FORWARDED_HOST']”比较好。