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 都是打印 \nvar_dump
可输出所有字符串、数字、布尔、数组、对象。包括键、值、类型、长度。
isset 与 empty 的区别
isset
检测变量是否设置并且非 NULLempty
检测变量的值是否为 false, PHP 中 0、false、[]、‘0’ 、‘’ 所代表的布尔值都是 false
for 与 foreach 的区别,哪个更快?为什么?
for
需要预先知道数组的长度, foreach 不需要foreach
效果要比 for 高,foreach 直接通过结构体中的 next 指针获取下一个值, 而 for 循环需要根据 key 先进行一次 hash 才得到值。