对比篇
约 780 字大约 3 分钟
2025-07-07
isset和empty的区别?
Isset
测试变量是否被赋值
,如果这个变量没被赋值,则返回false,empty
是判断变量是否为空
,当赋值为0,null,’’,返回true为真。他们之间最大的区别就是当一个变量被赋值0时,empty判断它为空,而isset判断它有值不为空。
define() 与 const 区别
- 两者都是定义常量使用
- const 是语言结构, define 是函数
- const 可在类中使用, define 不可以
- const 可以不同命名空间定义相同名称的常量, define 不可以
- const 大小写敏感, define 默认敏感, 可通过第三个参数为 true 设置为不敏感
include 和 require 的区别是什么?
- require 是无条件包含, 也就是如果一个流程里加入 require , 无论条件成立与否都会先执行 require , 当文件不存在或者无法打开的时候, 会提示错误, 并且会终止程序执行
- include有返回值, 而require没有 (可能因为如此 require 的速度比 include 快), 如果被包含的文件不存在的话, 那么会提示一个错误, 但是程序会继续执行下去
单引号与双引号的区别
- 单引号不解析变量,双引号解析变量
- 单引号只可解析单引号及转义符本身,双引号可解析更多的特殊字符。例:
\n
、\r
、\t
- 解析速度不同,因单引号不考虑变量解析,所以比双引号要快
传值与传引用的区别
- 按值传递 :函数范围内对值的任何改变在函数外部都会被忽略
- 按引用传递 :函数范围内对值的任何改变在函数外部也能反映出这些修改, 因为传引用传的是内存地址。
- 优缺点:按值传递时, php 必须复制值。特别是对于大型的字符串和对象来说, 这将会是一个代价很大的操作。按引用传递则不需要复制值, 对于性能提高很有好处。
== 与 === 的区别
== 要求两侧的值相同,弱类型判断
=== 要求两侧的值与类型都得相同
echo、print、print_r、var_dump 的区别
- print_r 与 var_dump 是函数, echo、print 是语句
echo
用于输出数值变量或字符串,可以逗号分隔输出多个。数组输出 Array, 对象报错。例:echo $a, $b;
print
用于输出数值变量或字符串, 不可输出多个。数组输出 Array, 对象报错。例:print $a;
print_r
可简单输出 字符串、数字、数组、对象, 但 布尔(false)、null 都是打印\n
var_dump
可输出所有字符串、数字、布尔、数组、对象。包括键、值、类型、长度。
for 与 foreach 的区别,哪个更快?为什么?
- for 需要预先知道数组的长度, foreach 不需要
- foreach 效果要比 for 高,foreach 直接通过结构体中的 next 指针获取下一个值, 而 for 循环需要根据 key 先进行一次 hash 才得到值。