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 相关文章推荐
php+oracle 分页类
Oct 09 PHP
模仿OSO的论坛(一)
Oct 09 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 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测试程序运行时间的类
2012/02/05 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
深入分析PHP引用(&)
2014/09/04 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
js实现旋转木马效果
2017/03/17 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
python使用zip将list转为json的方法
2018/12/31 Python
Python实现微信小程序支付功能
2019/07/25 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
广告业务员岗位职责
2014/02/06 职场文书
党员先进事迹材料
2014/12/19 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL