一、PHP的主要数据类型(8种)
string(字符串);int(整型);float(浮点型);bool(布尔型);array(数组);object(对象);resource(资源);null(空)
注意点:
浮点类型不能用于比较运算
布尔类型返回空的七种情况
0 整型0; 0.0 浮点0; ' ' 空字符串 ; '0' 0字符串; false 布尔false; array() 空数组; NULL ;
单引号与双引号的区别
双引号能够解析所有变量,而单引号不行
二、常量与运算符
1、预定义常量(常用的魔术常量)
__LINE__:文件中的当前行号
__FILE__:文件的完整路径和文件名(总是包含一个绝对路径)
__DIR__:文件所在目录(等价于dirname(__FILE__))
__FUNCTION__:返回该函数被定义时的名字(区分大小写)
__CLASS__:返回该类被定义时的名字(区分大小写);在trait方法中,返回trait方法的类的名字
__TRAIT__:返回trait被定义时的名字
__METHOD__:返回该方法被定义时的名字(区分大小写)
__NAMESPACE__:返回当前命名空间的名称(区分大小写)
2.运算符(运算符的优先级)
递增/递减(++$a)>!>算数运算符(+-*/%)>大小比较(<,<=,>>=)>相等/不相等比较(==,!=,===,!==)>引用(&)>位运算符(^)>位运算符(|)>逻辑与(&&)>逻辑或(||)>三目运算符(??)>赋值(=)>and>xor>or
注意点:
① 递增递减运算符不影响布尔值
② 递减null值没有效果,递增null值为1
三、流程控制
面试题:如何优化多个if...elseif语句的情况?
答:①将可能性较大的情况尽量往前放;②若表达式的返回值类型为整型,浮点型或者字符串,可以使用switch...case语句代替
面试题:遍历数组的三种方法
答:①for循环 ②foreach③while、list()、each()
$arr = array('a','b','c','d','e'); $count = count($arr); for($i=0;$i<$count;$i++) { echo $arr[$i]."\n"; } foreach($arr as $key=>$val) { echo $val."\n"; } while(list($k,$v) = each($arr)) { echo $v."\n"; }运行实例 »
点击 "运行实例" 按钮查看在线实例
四、函数
字符串相关函数:
http://php.net/manual/zh/ref.strings.php
数组相关函数:
http://php.net/manual/zh/ref.array.php
五、正则表达式 (作用:分割查找匹配替换)
1、定界符
定界符常用“/”
2、特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如runoo*b中的*,简单地说就是表示任何字符串的意思。
$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则$也匹配‘\n’或'\r'。若需要匹配$本身,请使用\$.
() 标记一个子表达式的开始和结束位置。子表达式可获取供以后使用。要匹配这些字符,也需要用\(或\)。
[ 标记一个中括号表达式的开始
^ 匹配输入字符串的开始位置,除非是在方扩中表达式中使用,此时表示不接受该字符集合。要匹配^本身,请使用\^
。
{ 标记限定符表达式的开始。
3、限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
* 表示匹配前面的子表达式零次或多次。等价于{0,}
+ 表示匹配前面的子表达式一次或多次。等价于{1,}
? 表示匹配前面的子表达式零次或一次。等价于{0,1}
{n} n 是一个非负整数。匹配确定的n次
{n,} 表示要匹配至少n次
{n,m} m与n 均为非负整数,其中n<=m。表示最少匹配n次,最多匹配m次。
4、正则匹配函数
ereg_replace(string $pattern , string $replacement , string $string)正则表达式替换
preg_match() 返回 pattern 的匹配次数,它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。
preg_match_all() 它会一直搜索 subject 直到到达结尾 ,如果发生错误preg_match()返回 FALSE。
//匹配手机号码正则 $mobile_preg = "/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|16[5,6]|17[0-8]|18[0|1|2|3|5|6|7|8|9])\d{8}$/"; //匹配***号码正则(只是简单匹配,***号是需要强验证的) $identify_preg = "/^[1-9]\d{5}(18|19|2([0-9]))\d{2}(0[0-9]|10|11|12)([0-2][1-9]|30|31)\d{3}[0-9Xx]$"; //匹配邮箱正则 $email_preg = "^[a-z0-9._%-]+@([a-z0-9-]+\.)+[a-z]{2,4}$|^1[3|4|5|7|8]\d{9}$";运行实例 »
点击 "运行实例" 按钮查看在线实例
六、文件及目录处理
常用的文件处理函数
fopen( string $filename , string $mode ) 用来打开一个文件,打开时需要自定打开模式
打开模式:
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
'x+' 创建并以读写方式打开,其他的行为和 'x' 一样。
//使用PHP函数遍历某个目录中的文件或文件夹 $dir = './test/test.php'; function show($dir){ $dir = opendir($dir); echo "<ul>"; while($f = readdir($dir)){ if($f!='.' && $f!='..'){ echo "<li>{$f}</li>"; if(is_dir("$dir/{$f}")){ show("$dir/{$f}"); } } } }运行实例 »
点击 "运行实例" 按钮查看在线实例
七、PHP7新特性「详细参考https://www.php.net/manual/zh/migration70.new-features.php」
标量类型声明
可以使用(int)(string)(float)(bool)来限制变量的数据类型;
返回值类型声明
返回值类型声明与标量类型声明类似;
null合并运算符??
解决了三元运算符以及isset()的情况;
例:$userName = $GET['name'] ?? nobody;
太空船运算符(组合比较符)
太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1,-,1。比较的原则是沿用PHP的常规比较规则进行的。
例:echo 1 <=> 1;//0
echo 1<=>2; //-1
echo 2<=>1;//1
通过define()定义常量数组
Array类型的常量现在可以通过define()定义。在PHP5.6版本中仅能通过const定义。
例:
define('ANIMALS',['dog','fish','cat','bird']);
匿名类
支持通过new class 来实例化一个匿名类,这可以用来替代一些‘用后即焚’的完整类定义。
例 new class implements interfaceTest{ }