php基础
php基础
PHP的8种数据类型
- 四种标量
- boolean
- integer
- float
- string
- 两种复合类型
- array
- object
- 两种特殊类型
- resource
- NULL
类型转换
- (int), (integer):转换为整型
- (bool), (boolean): 转为布尔型
- (float), (double), (real): 转为浮点型
- (string): 转换成字符串
- (array): 转换成数组
- (object): 转换成对象
类型转换函数
- intval() 转为整数值
- floatval() 获取变量的浮点值
- strval() 获取变量的字符串值
检测变量类型
- is_bool() 判断是否是布尔型
- is_int(), is_integer(), is_long() 是否是整型
- is_float(), is_double(), is_real() 是否是浮点型
- is_string() 是否是字符串
- is_array() 是否是数组
- is_object() 是否是对象
- is_resource() 是否是资源
- is_null() 是否为空
- is_scalar() 是否是标量 (整数,浮点数,布尔型,字符串)
- is_numerice() 是否是任何类型的数字或数字字符串
- is_callable() 判断是否是有效的函数名
魔术常量
__FILE__
当前文件名__LINE__
当前行数__FUNCTION__
当前函数名__CLASS__
当前的类名__METHOD__
当前对象的方法名
正则表达式
正则表达式的作用
- 分割
- 匹配
- 查找
- 替换
正则表达式中包括的元素
- 原子(普通字符:a-z A-Z 0-9、原子表、转义字符)
- 元字符(有特殊功能的字符)
- 模式修正符(系统内置部分字符i, m, S, U…)
转义字符
- \d 包含所有数字[0-9]
- \D 除所有数字外[^0-9]
- \w 包含所有字符(大小写英文字母,下划线,数字) [a-zA-Z_0-9]
- \W 除所有字符(大小写英文字母,下划线,数字)外 [a-zA-Z_0-9]
- \s 空白区域如回车,换行,分页等 [\f\n\r]
- \S 非空白区域 [^\f\n\r]
元字符
- . 匹配任意次单不包含回车换行
- * 匹配任意次
- ?匹配0次或1次
- + 匹配1次或多次
- | 选择匹配
- ^ 匹配开头 | 方括号中表示非
- $ 匹配结尾
- {m} 匹配前一个内容的重复次数为m次
- {m,} 匹配前一个内容的重复次数大于等于m次
- {m,n} 匹配前一个内容的重复次数m次到n次
- () 合并整体匹配,并放入内存,可使用\1 \2 … 依次获取
模式修正符:
- 小写i:不区分大小写
- 小写m:匹配首内容或尾内容时采用多行识别匹配
- 小写s:将转义回车取消视为单行匹配
- 小写x:忽略正则中的空白
- 大写A:强制$匹配尾部无任何内容
- 大写U:禁止贪婪匹配,值跟踪到最近的一个匹配符并结束,常用在采集程序
- 小写u:匹配中文
Perl正则表达式函数:
- preg_grep($mode, $str) //匹配查找,返回一个数组
- preg_match($mode, $str, $return) // 在字符串中查找匹配项,返回一个数组
- preg_match_all($mode, $str, $return[, int flags])
- preg_split($mode,$str [,int limit 切割多少次 [,int flags] ] ) //使用正则表达式分割字符串,并将结果以数组的形式返回(类似explode)。
- preg_replace($mode,$replacement,$str [,int limit 匹配多少次]) //查找和替换子字符串(类似str_replace)
- preg_quote($str) //在每个正则表达式的特殊字符前面加入一个转义字符(反斜线“\”),正则表达式的特殊字符包括:.\+*?[^]$(){}=!<>|:
正则解题方法
- 先写出一个要匹配的字符串
- 自左向右的顺序使用正则表达式的原子和元字符拼接
- 加入模式修正符
常用正则表达式
1 | //删除一对中括号内的内容: |
字符串函数
查找字符串位置函数
- strpos($str,search,[int]):查找search在$str中的第一次位置从int开始;
- stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置。该函数对大小写不敏感
- strrpos($str,search,[int]):查找search在$str中的最后一次出现的位置从int开始
- strripos($str,search,[int]):同上,该函数对大小写不敏感
提取子字符串函数(双字节)
- substr($str,int start[,int length]):从$str中strat位置开始提取[length长度的字符串]。
- strstr($str1,$str2):从$str1(第一个的位置)搜索$str2并从它开始截取到结束字符串;若没有则返回FALSE。
- stristr() 功能同strstr,只是不区分大小写。
- strrchr() 从最后一次搜索到的字符处返回;用处:取路径中文件名
替换字符串的PHP字符串函数
- str_replace(search,replace,$str):从$str中查找search用replace来替换
- str_ireplace(search,replace,$str):同上,该函数对大小写不敏感
- strtr($str,search,replace):这个函数中replace不能为””;
- substr_replace($Str,$rep,$start[,length]):$str原始字符串,$rep替换后的新字符串,$start起始置,$length替换的长度,该项可选
字符串长度
- strlen()
获取字符串产长度
1
2echo strlen("Hello world!");
// 12
分割成数组的PHP字符串函数
str_split($str,len):把$str按len长度进行分割返回数组
split(search,$str[,int]):把$str按search字符进行分割返回数组int是分割几次,后面的将不分割 expload(search,$str[,int])
去空格
- ltrim()
- rtrim()
- trim()
大小写
strtolower($str): 字符串转换为小写
strtoupper($str): 字符串转换为大写
ucfirst($str): 将函数的第一个字符转换为大写
ucwords($str): 将每个单词的首字母转换为大写
str_word_count()
对字符串中的单词进行计数
1 | echo str_word_count("Hello world!"); |
- strrev()
翻转字符串
1 | echo strrev("Hello world!"); |
- strpos()
检索字符串内指定的字符或文本.如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。
1 | echo strpos("Hello world!","world"); |
- stripos()
将一个字符串转换为数组。
1 | echo stripos('abcabc', 'A'); |
- str_replace()
用一些字符串替换字符串中的另一些字符
1 | echo str_replace("world", "Kitty", "Hello world!"); |
- strtoupper() strtolower()
字符串大小写转换
1 | echo strtoupper('hello world'); |
- str_split()
将一个字符串转换为数组。
1 | print_r(str_split('good_morning', 2)); |
数组函数
排序类
- 按value
- sort
- rsort
- asort
- arsort
- 按key
- ksort
- krsort
- 按字母
- natsort 区分大小写的排序
- natcasesort 不区分大小写的排序
- 回调
- usort
- 规律
- 没有k,排序按照value排序,排序有”a”的表示要保留KEY,有”r”的倒序排
- 有k,排序按照【KEY】排序,有”r”的倒序排
- 有”u”的,表示要丢到回调函数中处理的
键值操作类
都有返回值,没有在原来的参数上修改
- array_values($arr);//获取$arr中的值重排,去掉下标【返回值新索引数组】
- array_keys($arr[,”str”,true])//获取$arr中所有字符是”str”的下标,形成索引数组,true表示区分大小写【返回新索引数组】
- array_search(“is”,$arr[,true]) //返回值”is”在$arr中的key,找不到返回fales,true表示严格按照类型(8,”8”)【返回第一个匹配值】
- in_array(“str”,$arr);//判断”str”在$arr中是否存在,【返回BOOL】
- is_array($arr);//判断是否是数组【返回BOOL】
- array_key_exists($key,$arr); //查询$arr中是否有$key,【返回BOOL】
- array_flip($arr);// 交换键值,如有重复,后来居上,【返回新数组】
- array_reverse($arr,[true|false]);//数组顺序反转,param2是否保留原来键值【返回新关联/索引数组】
- array_column(array(),’name’[,name_two]) — 返回数组中指定的name列[可选参数,如果有返回name=>name_two的形式]【返回一维数组】
元素个数和唯一性
- array_unique($arr);//去掉$arr中的重复值,重复的保留第一个值,【返回数组,键值保留】
- array_count_values($arr)//统计数组值出现的次数,【返回数组,KEY为原来数组的值,VALUE为统计的次数】
- count($arr[,1])/sizeof();//统计$arr的元素个数,参数”1”表示统计多维数组开启,默认0为关闭【返回统计个数】
回调函数
- array_filter($arr,”function”);//把$arr放到函数function中处理,【返回判断为TRUE的数据组成新数组,键值保留】
- array_walk($arr,”function”[,”data”]);//把$arr放到function(&$v,$k,$data)中处理【返回值为bool】
- array_map(“function”,$arr,$arr2,$arr3,….);//把所有数组返回到回调函数统一处理,【返回数组】
- array_reduce($arr,myfunction[,initial]):把一维数组$arr中的值依次传到自定义函数myfunction($v1,$v2)的v2上,v1为累加值类似于( .= ),[如果有initial,先把其当v1传进去]【返回字符串】
拆分,合并,分解,接合数组
- array_slice($arr,1[,2]);//在$arr中,从第二个开始取[,返回俩个值]【返回新数组(对原数组无影响),键值保留】
- array_splice($arr,1[,2,”aaa”,”bb”]);//删除或替换,从$arr第二个开始取,删除或替换2个值【返回值为新数组,拆掉原数组】
- array_combine($arr1,$arr2);//数组$arr1为KEY,$arr2为VALUES结合形成新索引数组【返回索引数组】
- array_merge($arr1,$arr2,$arr3…);//数组进行合并,保留键值,有重复,后来者居上【返回新数组】
- array_merge发现有key值相同的,取后者;
- $arr1+$arr2 发现有key值相同的,取前者,第二个重复的值丢弃
- array_intersect($arr1,$arr2)//返回两个数组的交集,键值不变
- array_diff($arr1,$arr2)//返回两数组的差集,返回的值为第一个数组的值,键值不变
- array_chunk($arr,2)//分割数组,把$arr按照【2个为一组】均等分割【返回一个二维数组】
数组的数据结构【2.无返回值,传值引用,就直接对原数组进行了修改】
- array_shift($arr)//从开头,删除数组第一个元素
- array_unshift($arr,”one”,”two”)//从开头,添加元素
- array_pop($arr)//从结尾,删除数组最后一个元素
- array_push($arr,”aaa”);//从结尾,添加元素
- current($arr)//返回数组中的当前单元 比如是关联数组是不知道下标,可以输出当前数组的办法解决
- shuffle($arr)//随机的重组$arr,顺序变乱【返回新数组,保留键值】
- array_sum($arr);//返回$arr的value的和【返回一个值】
- range(0,10,2,)//快速创建0,10的数组,间隔为2,所以有5个值【返回新索引数组】
- http_build_query($arr)//把关联数组转换成一个经过urlencode加密的URL eg:array[“a”=>2];=>URL:a=2&
文件处理
基础函数
- file_exists($file)//文件是否存在,【true/false】
- filesize($file) //返回文件的大小【大小字节/出错false】
- is_readale($file)//是否可读【返回bool】
- is_writeable($file)//是否可写【返回bool】
- is_executable($file)//是否可执行【返回bool】
- filectime($file)//文件创建时间【时间戳】
- filemtime($file)//文件修改时间【时间戳】
- fileatime($file)//文件访问时间【时间戳】
- stat($file)//返回文件的大部分信息【文件信息数组】
目录的基本操作
- basename($file)//返回文件名,index.php
- dirname($file)//返回文件的路径,c://php/
- pathinfo($file)//返回该文件路径的所有信息 [“dirname”目录名] [“basename”文件名] [“extension”文件后缀]
目录复制,删除,统计大小使用的总结:
- 本质:依靠递归思想,对目录的的循环遍历,通过每一个文件的操作,得出结果
- 函数:
- 复制:copy($org,$to);mkdir()
- 删除:unlink($file);mrdir();
- 统计大小:filesize($file)
遍历目录
- opendir($file)//打开一个目录,参数为目录名或目录路径【返回资源型的目录句柄$dir_handle,无权限返false】
- readdir($dir_handle);//读取目录,参数为目录句柄,while,返回当前指向对象的名字,目录指针后移【返回filename,没有是返false】
- closedir($dir_handle)//关闭打开的目录
- rewinddir($dir_handle) //倒回目录句柄,将目录指针重置到目录开始
建立和删除目录
- mkdir(“dir_name”);//建立一个空的目录
- rmdir(“dir_name”);//删除一个空的目录
- unlink(“file_name”)//删除一个文件,当删除目录是,必须删除该目录下的文件
文件的基本操作
fopen($fileName,”模式字符r,w,x”)//打开一个文件,【返回值为资源型$handle】
fclose($handle) //关闭打开的文件【返回BOOL】
fwrite($handle,”$data”)//把$data写入$handle文件,先清空后写入,【成功返回$handle,失败返回false】
file_put_contents($filename,$data);//它是上边三个合起来的效果
file_get_contents($filename)//读取文件里的信息【返回字符串】
flock($handle,$operation) //用$operation锁定文件$handle
copy($file1,$file2);//赋值$file1,形成$file2【返回BOOL】
unlink($file);//删除$file文件【返回BOOL】
rename($file1,$file_new_name);//重命名【返回BOOL】
文件的上传
- is_upload_file($_FILES[‘file’][‘tmp_name’]) //检查是否合法
- move_upload_file($_FILES[‘file’][‘tmp_name’],$url); //上传合法文件到$url
注意:html:form: method=”post” ;enctype=”multipart/form-data”
文件下载
- header(‘content-disposition:attachment;filename=’.basename($filename));//表示附件方式下载
- header(‘content-length:’.filesize($filename));
- readfile($filename);
数学函数
- ceil()//向上取整
- floor()//向下取整
- round();//四舍五入
- abs();//取绝对值
- rand(10,100)//随机取值
- mt_rand(10,100)//随机取值,算法不同,速度更快
- fmod()//返回除法浮点形余数
- max(int/$arr)//取最大值
- min(int/$arr)//取最小值
- pow(1024,2)//返回1021的2次幂
时间函数
- date_default_timezone_set()(‘PRC’);//设置时区为中国
- date.timezone =”PRC”;//PHP.INI
- time();//默认获取当前时间,【返回时间戳格式】
- micritime();//获取当前时间【返回毫秒的时间戳】
- mktime(H,i,s,m,d,Y)//指定时间转为时间戳,参数为空的时候作用与time()相同【返回时间戳格式】
- strtotime(‘2015-10-10 10:10:10’);//指定时间转换为时间戳【返回时间戳】
- date(“Y-m-d H:i:s”,time());//转换时间戳为日期格式【返回目标格式的字符串】
- getdate()//获取当前时间,【返回一个数组,参数年,月,日等都有】
URL处理函数
- urlencode($url)//对该URL进行编码;原因:防止乱码,解决空格的呢个字符不能传递问题,form也是此编码格式传递
- urldecode($url)//对该URL进行解码
- parse_url($url)//返回该URL的所有信息,[scheme协议][host域名] [path路径][query参数] 【返回含信息的数组】
- pathinfo($url)//[“dirname”目录名] [“basename”文件名] [“extension”文件后缀]【返回含信息的数组,下标不同】
- get_meta_tags($url)//获取该页面的所有META标签【返回关联数组】
2. 面向对象
面向对象基础
面向对象的三种权限标识符
- public 公共成员,完全公开,没有访问限制
- protected 保护成员,在类内部和子类中可以访问
- private 私有成员,在类的内部才可以访问
面向对象的三大特征:
- 继承
- 封装
- 多态
魔术方法
__construct()
实例化类时自动调用__destruct()
类对象使用结束时自动调用__set()
给未定的属性赋值时调用__get()
调用未定义的属性时调用__isset()
使用isset()或empty()函数时会调用__unset()
使用unset()时会调用__sleep()
使用serialize序列化时会调用__wakeup()
使用unserialize反序列化时会调用__call()
调用一个不存在的方式时调用__callStatic()
调用一个不存在的静态方式时调用__toString()
把对象转换成字符串的时候会调用__invoke()
当尝试把对象当方法调用时调用__set_state()
当使用var_export()函数时调用,接收一个数组参数__clone()
当使用clone复制一个对象时调用
$this, self, parent这三个关键词分别代表什么?
- $this 当前对象
- self 当前类
- parent 当前类的父类
final
- final 不能修饰属性
- 修饰方法,此方法能继承,不能重写
- 修饰类,此类不能被继承