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. 先写出一个要匹配的字符串
  2. 自左向右的顺序使用正则表达式的原子和元字符拼接
  3. 加入模式修正符

常用正则表达式

1
2
3
4
5
6
7
//删除一对中括号内的内容:
$str = 'abc[url]123[/url]xyz';
$pattern = '/\[url\S*\[\/url\S*\]/';
$str = preg_replace($pattern, '', $str);
echo $str . ''; //输出:abcxyz


字符串函数

查找字符串位置函数

  • 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
    2
    echo 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
2
echo strrev("Hello world!");
// !dlrow olleH
  • strpos()

检索字符串内指定的字符或文本.如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。

1
echo strpos("Hello world!","world");
  • stripos()

    将一个字符串转换为数组。

1
2
3
4
5
6
7
8
echo stripos('abcabc', 'A');
// 0
echo stripos('abcabc', 'B');
// 1
echo stripos('abcabc', 'C');
// 2
var_dump(stripos('abcabc', 'D'));
// bool(false)
  • str_replace()

    用一些字符串替换字符串中的另一些字符

1
echo str_replace("world", "Kitty", "Hello world!");
  • strtoupper() strtolower()

    字符串大小写转换

1
2
3
4
5
echo strtoupper('hello world');
// HELLO WORLD

echo strtolower('Hello World');
// 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)
  • 遍历目录

    1. opendir($file)//打开一个目录,参数为目录名或目录路径【返回资源型的目录句柄$dir_handle,无权限返false】
    2. readdir($dir_handle);//读取目录,参数为目录句柄,while,返回当前指向对象的名字,目录指针后移【返回filename,没有是返false】
    3. closedir($dir_handle)//关闭打开的目录
    4. 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 不能修饰属性
  • 修饰方法,此方法能继承,不能重写
  • 修饰类,此类不能被继承