PHP易混淆知识整理笔记


Posted in PHP onSeptember 24, 2015

1.echo和print的区别

PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1。

$r = print "Hello World";

这意味着print可用在一些复杂的表达式中,而echo则不行。但是,因为echo语句不要求返回任何数值,所已在代码中echo语句的运行效率要略微快于print语句。

2.include与require的区别

include()与require()的功能也基本相同(包含),但在用法上也有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面代码中,如果变量$a为真,则将包含文件a.php:

if($a){   
include("a.php");   
}

而require()则和include()不同,不管$a取何值,下面的代码将把文件a.php包含进文件里:

if($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 的值,看下边例子:

$id=0;   
empty($id)?print "我是空的":print "我是$id ."; //结果:我是空的   
!isset($id)?print "我是空的":print "我是$id .";//结果:我是0

6.==(等)和===(恒等)的区别

回顾上面第四条空字符串("")和NULL的区别,再来看一个例子:

'' == 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']”比较好。

经过小编对以上知识点的整理,大家的思路是不是更清晰了,对这些概念是不是有了区分,那就好好收藏这份笔记吧!

PHP 相关文章推荐
我常用的几个类
Oct 09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
php 归并排序 数组交集
May 10 PHP
PHP反向代理类代码
Aug 15 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 PHP
PHP直接修改表内容DataGrid功能实现代码
Sep 24 #PHP
PHP生成条形码大揭秘
Sep 24 #PHP
php商品对比功能代码分享
Sep 24 #PHP
php实现简易聊天室应用代码
Sep 23 #PHP
利用PHP如何实现Socket服务器
Sep 23 #PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 #PHP
Discuz!X中SESSION机制实例详解
Sep 23 #PHP
You might like
php curl的深入解析
2013/06/02 PHP
php类自动加载器实现方法
2015/07/28 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
python多线程编程方式分析示例详解
2013/12/06 Python
python编写Logistic逻辑回归
2020/12/30 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
python实现简单的购物程序代码实例
2020/03/03 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
python搜索算法原理及实例讲解
2020/11/18 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
事业单位个人应聘自荐信
2013/09/21 职场文书
初中生学习的自我评价
2013/11/14 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
展览会邀请函
2015/02/02 职场文书
出国留学导师推荐信
2015/03/26 职场文书
早会开场白台词大全
2015/06/01 职场文书