php整理
1.include
和require
的区别
- 加载失败的处理方式不同。引入不存在的文件时,
include
会产生警告且脚本还会继续执行,require
则会导致一个致命性错误且脚本停止执行。 - 文件引用方式不同。
include()
执行时需要引用的文件每次都进行执行,并且可以有返回值,require()
只是单纯的文件替换,没有返回值require
一般放在php
文件的最前面,程序在执行前会先倒入所需要引用的文件;include
一般放在程序的控制流程中,当程序执行时碰到才会引用,简化程序的执行流程。
2.常用关键字final
:用于声明方法和类,修饰类时,该类不能被继承,修饰方法时,该方法不能被覆盖。static
:主要用来修饰成员变量以及成员方法,分别为静态变量和静态方法,通过类直接调用。global
:主要使用于函数内声明变量为全局变量,在函数内部可以使用外部变量。global
声明的变量只是全局变量的一个同名引用,$globals
是全局变量本身。this
、self
、parent
:this
是指向当前对象的指针,self
是指向当前类的指针,parent
是指向当前父类的指针。trait
:是为php
的单继承语言而准备的一种代码复用机制。trait 为了减少单继承语言的限制,使开发人员能够*地在不同层次结构内独立的类中复用interface
:接口是一个成员属性全部为抽象或常量的特殊抽象类,作用是:弥补php单继承,单继承,多实现
(1)定义的方法都是抽象方法,只需要声明,不需要实现
(2)定义的变量全部为常量(const
声明)implements
:实现接口,可以多实现abstract
:修饰方法时,只有方法名,没有方法体(abstract function()
);只要声明抽象方法的类就是抽象类;抽象类不能实例化,可以被继承,可以看做子类实现的规范和模板;
3.php7
新特性
(1)添加了函数的形参声明和返回类型声明
默认情况下,所有的php
文件都处于弱类型校验模式。php7
增加了标量类型声明的特性,标量类型声明两种模式
- 强制模式(默认)
- 严格模式php7
增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型;
(2)添加了null
合并运算符(??
)是用于执行isset()
检测的三元运算
(3)可以使用一个use
从同一个namespace
导入多个类、函数;
(4)改变了大多数错误的报告机制;
4.单引号和双引号
单引号:在单引号字符串中的变量和特殊字符的转义序列不会被替换
双引号:在双引号定义的字符串最重要的特征是变量会被解析
5.echo
、print
、print_r
、var_dump
之间的区别
-
echo
和print
都是语言结构,只能输出简单类型的值(字符、数字),唯一不同的是echo
支持输出多参数,print
只能输出一个参数 -
print_r
和var_dump
是函数,可用于打印数组和对象,前者只支持一个参数,后者支持多个参数并且显示信息更详细,常用于调试。 -
var_export
输出或返回一个变量的字符串表示,和var_dump
功能类似,但是输出的是合法的php
代码
6.post
、get
、put
、delete
基于curd
:post
=> create
get
=> read
put
=> update
delete
=> delete
7.用php
写出显示客户端ip
和服务器端ip
的代码echo $_server['remote_addr']. "<br/>"; //客户端
echo $_server['server_addr']. "<br/>"; //服务器端
8.用php打印出前一天的时间,格式例如 2006-5-10 22:21:21echo '当前时间:'.date('y-m-d h:i:s', time()). "<br/>";
echo '前一天时间:'.date('y-m-d h:i:s', strtotime('-1 day')). "<br/>";
9.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹
//opendir:打开目录句柄 //readdir:返回目录句柄中的条目 //closedir:关闭目录句柄 //mkdir:创建目录 //rmdir:删除目录 //is_dir:是否是目录 function read($dir = ''){ $handle = opendir($dir); if ($handle){ while ($file = readdir($handle)){ if ($file!='.' && $file!='..'){ $fullpath = $dir.'/'.$file; if (is_dir($fullpath)){ echo $fullpath, "<br/>"; read($fullpath); }else{ echo $fullpath, "<br/>"; } } } } closedir($handle); }
10.isset()
和empty()
false
:当转换为boolean
时,以下值被认为是false
-布尔值false本身
-整型值0(零)
-浮点值0.0
-空字符串'',字符串'0',以及尚未赋值的变量
-不包含任何元素的数组
-特殊类型null
-所有其他值都被任务是truenull
类型的三种情况:
-通过变量赋值明确指定变量的值为null
-一个变量没有给任何值
-使用函数unset()将变量销毁掉empty()
:当传入的变量的值为false
或者null
,为true
,反之为false
isset()
:当出入的变量为null
时,为true
,反之为false
11.关于error
在程序开发调试错误的过程中,我们总会遇到各种各样的error
,部分error
会影响到代码的执行,部分则只是给出一个warning
或notice
,不会影响下面代码的继续执行。@
:错误控制运算符,放在php
表达式之前,该表达式可能产生的任何错误信息都被忽略掉error_reporting(int $level)
:设置应该报告何种php
错误,设置为0则关闭掉错误报告
12.修改session
的生存时间php.ini
文件中的session.gc_maxlifetime
的值进行修改,然后重启,或者代码设置
13. php.ini文件中的safe_modesafe_mode
:安全模式,提供一个基本安全的共享环境,当safe_mode
打开时,一些访问文件系统的函数功能会被限制,如:mkdir
,touch
,readdir
,opendir
等..
14.如何得到网址http://www.phpres.com/index.html
的内容
echo file_get_contents('https://www.baidu.com'); //parse_url:解析一个url并返回一个关联数组,包含在url出现的各种组成部分 print_r(parse_url('http://www.phpres.com/index.html'));
15.取出文件扩展名
$str = 'dir/upload.image.jpg'; echo array_pop(explode('.', $str)), "<br/>"; echo pathinfo($str, pathinfo_extension), "<br/>";
16.求两个日期的差值 2007-2-5 ~ 2007-3-9
$ints1 = strtotime('2007-3-5'); $ints2 = strtotime('2007-3-9'); echo ($ints2-$ints1)/(60*60*24), "<br/>";
17.将'open_door'转换成'opendoor',将'make_by_id'转换成'makebyid'
$str1 = 'open_door'; $str2 = 'make_by_id'; echo str_replace(' ', '', ucwords(str_replace('_', ' ', $str1))), "<br/>"; echo str_replace(' ', '', ucwords(str_replace('_', ' ', $str2))), "<br/>";
18.超全局变量
超全局变量是在全部作用域中始终可用的内置变量。$globals
:引用全局作用域中可用的全部变量$_server
:服务器和执行环境的信息$_get
:http get
变量$_post
:http post
变量$_files
:http
文件上传变量$_cookie
:http cookies
$_session
:session
变量$_request
:http request
变量$_env
:环境变量
19.常用魔术常量__line__
:文件中的当前行号__file_
:文件的完整路径和文件名__dir__
:文件所在的目录__function__
:函数名称__class__
:类的名称__trait__
:trait
的名字,包括其被声明的作用区域__method__
:类的方法名__namespac__
:当前命名空间的名称
20.解析函数、析构函数,常用的魔术方法__construct
:在类被实例化的时候自动执行;__destruct
:在对象被销毁的时候自动执行;__tostring
:在对象被当成字符串使用时自动执行;__invoke
:在对象被当成函数执行的时执行执行;__clone
:在克隆对象时自动执行;
数值常用函数float ceil($num)
:进一取整float floor($num)
:舍一取整float round($num, $n)
:四舍五入,可保留n位小数
number pow(number $base, number $exp)
:幂运算float sqrt(float $arg)
:平方根
number max($num1, $num2...)
:返回最大值number min($num1, $num2...)
:返回最小值
int rand($min, $max)
:产生min到max之间的随机数int mt_rand($min, $max)
:同上,但效率更高
string number_format($number, $n)
:以千分位分隔符方式格式化数字,并保留n位小数
字符串常用函数
--- 长度int strlen($var)
:获取字符串或数字的长度(汉字默认utf8格式,长度位3)int mb_strlen($var)
:获取字符串或数字的长度(汉字长度位1)
--- 大小写string strtolower($str)
:单词小写string strtoupper($str)
:单词大写string ucfirst($str)
:首字母大写,其他字母不变string ucwords($str)
:每个单词首字母大写,其他字母不变
--- 替换string str_replace($search, $replace, $str)
:将字符串str
里面的serach
部分换位replace
字符串,区分大小写string str_ireplace($search, $replace, $str)
:同上,不区分大小写string htmlspecialchars($str)
:将str里面的字符转换为html
实体,比如将<
改为<
--- 去除空格string ltrim($str)
:删除左边的空格string rtrim($str)
:删除右边的空格string trim($str)
:删除两边的空格
--- 位置int strpos($str, $needle)
:返回needle
第一次在str
出现的位置,区分大小写int stripos($str, $needle)
:同上,不区分大小写int strrpos($str, $needle)
:返回needle
最后一次在str
出现的位置,区分大小写int strripos($str, $needle)
:同上,不区分大小写
-- 截取string substr($str, $offset, $length)
:字符串截取
--- 反转string strrev($str)
:字符串反转
--- 加密string md5($str)
:md5
加密
--- 打乱string str_shuffle($str)
:随机打乱字符串,可用于产生随机验证码
--- 拆散组合array explode($delimiter, $str)
:将字符串str
按照delimiter
分割成数组string imploae($glue, $arr)
:将数组arr
按照glue
拼接成字符串
数组常用函数mixed array_shift(array &$arr)
:将数组第一个元素移除数组并返回。将array
的长度减1并将其他单元向前移动一位。所有数字键名改为从0开始计数mixed array_unshift(array &$arr, mixed $str)
:在数组的开头插入一个或多个单元。将传入的单元插入到array
数组的开头。
int array_push(array &$arr, mixed $v1...)
:将一个或多个单元压入数组的末尾(入栈),数组长度增加。返回压入后数组的长度mixed array_pop(array &$array)
:弹出数组的最后一个单元,数组长度减1mixed array_rand(array $array, $n)
:从数组中随机取出n
个键名
current($arr)
:返回数组中的当前单元的值key($arr)
:返回数组中的当前单元的键prev($arr)
:将数组中的内部指针向前移动一位,并返回值next($arr)
:将数组中的内部指针向后移动一位,并返回值reset($arr)
:将数组中内部指针指向第一个单元end($arr)
:将数组中的内部指针指向最后一个单元
array_keys($arr)
:返回数组中所有的键array_values($arr)
:返回数组中所有的值array_mpa('function', $arr)
:将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组
文件常用函数int filesize($filename)
:返回文件大小的字节数
int filectime($filename)
:返回文件的创建时间的时间戳int filemtile($filename)
:返回文件的最后修改时间的时间戳int fileatime($filename)
:返回文件最后访问时间的时间戳is_readable($filename)
:是否可读is_writabel($filename)
:是否可写is_executable($filename)
:是否可执行is_file($filename)
:是否是文件file_exists($filename)
:文件是否存在
array pathinfo($filename, pathinfo_extension)
pahtinfo_dirname
:文件夹名pathinfo_basename
:文件全称pathinfo_extension
:文件拓展名pathinfo_filename
:文件名
bool touch($filename)
:创建文件bool unlink($filename)
:删除文件bool rename($oldname, $newname)
:重命名bool copy($source, $des)
:将source
文件移动到des
string file_get_contents($filename)
:将整个文件读入一个字符串int file_put_contents($filename, $str)
:将一个字符串写入文件
string serialize($value)
:产生一个可存储的值的表示,成为字符串mixed unserialize($str)
:从已存储的表示中创建php
的值,成为反序列化
string json_encode($value)
:对变量进行json
编码,返回json
字符串mixed json_decode($str)
:对json
格式的字符串进行编码,转换成php
变量
日期常用函数
--- 时区相关php.ini文件中的date.timezone
string date($format, int $timestamp)
:格式化一个时间戳 format:y-m-d h:i:s
int time()
:返回当前unix时间戳,即1970年1月1日0时0分0秒到现在的总秒数float microtime(true)
:返回当前unix
时间戳微秒数int strtotime(string $time)
:将字符串转换为unix
时间戳yesterday
昨天00:00:00-1 day
昨天-1 month
一个月前
array getdate(int $timestamp)
:可以日期、时间信息
array
(
[seconds] => 43 //秒
[minutes] => 50 //分
[hours] => 15 //小时
[mday] => 1 //一个月中的第几天
[wday] => 4 //一周中的第几天
[mon] => 8 //月
[year] => 2019 //年
[yday] => 212 //一年中的第几天
[weekday] => thursday //星期几的名称
[month] => august //月份名称
[0] => 1564667443 //时间戳
)
下一篇: 在GBA上写光线追踪:定点数运算库