html 01, 3月27 一. 可以写在head头部的标签 1.title 用于定义网页的标题 2.meta 用于定义页面描述的相关信息 常用属性: 1.charset 用于设置网页字符集 值: utf-8 gbk gb2312 2.content 定义与 http-equiv 或 name 属性相关的元信息 3.name 将content的值关联到一个名称 值: author 定义网页的作者 keywords 定义网站关键字 description 定义网站描述 4.http-equiv 将content的值关联到http的头部 常用的值: content-type 定义文档的字符集 refresh 刷新或者跳转页面 3.link标签 用于定义两个文档的关系,通常用于导入一个css文件 常用属性 rel 定义两个文档之间的关系 css文件:stylesheet icon小图标: icon href 定义文件的地址 实例: 4.script标签 用于执行js文件 常用属性 src 外部js文件的地址 实例: 5.style标签 二.HTML中的文本标签 h族 标题标签 h1~h6 数字越大,字体越小 p 段落标签 b 定义粗体文本 strong 表示重要,用粗体显示 i 定义斜体文本 em 表示强调,用斜体显示 sub 下标 sup 上标 button 按钮标签 三 超链接标签 a 属性 href 指定跳转地址 注意: 1.值为空默认为刷新当前页 2.要跳转网络地址,一定要加上http://协议 target 指定跳转方式 值: _self 在本页面打开(默认) _blank 在新窗口打开 _top和其他分帧的name值,以后再讲 name 用于锚点跳转 锚点跳转:a标签href的值一定要与另一个a标签的name值或者其他标签的id值一毛一样 四.路径 1.相对路径 从当前访问的文件出发 ./ 当前目录 ../ 上一级目录 ../../ 上上级目录 ../../../../../ 点到盘符为止 2.绝对路径 指的是完整的路径 http://www.baidu.com file:///D:/wamp/www/1.html html 02, 3月28 五.图片和图像映射 img 标记一张图片 属性: src 图片路径(相对或者绝对) alt 图片加载失败的时候显示的文字 title 给图片加描述 width/height 设置图片的宽高 align 设置图片在本行中的位置 值:top/bottom/left/right usemap 定义图片映射,和map标签的name值相对应 map 用于图像映射 属性: name name的值用于配合img标签中的usemap属性 area 定义图像映射的区域 属性 shape 映射的形状 default 规定全部区域。 rect 定义矩形区域。 circ 定义圆形。 poly 定义多边形区域。 coords 配合shape使用,确定可点击区域的坐标 href 点击区域要去的地址 target 打开方式 六.音频标签 七.视频标签 八,音频标签 source 定义音频或者视频的媒介资源 属性: src 定义媒介资源的路径 会从资源列表中找出一个可解析的资源 九.表格标签 table 定义个表格 属性: border 定义表格的边框,值是边框的宽度 width 定义表格的宽度 cellspacing 定义每个单元格之间的空白距离 cellpadding 定义每个单元格内容与边框之间的距离 bgcolor 设置表格的背景颜色 align 设置表格的水平位置 值:left(默认)/right/center caption 定义表格的标题 tr 定义表格的行(有多少行就有多少对tr) 属性: height 设置行的高度 align 设置本行的文本的水平对齐方式 值:left(默认)/right/center valign 设置本行文本的垂直对齐方式 值:top/bottom/middle(默认) bgcolor 设置本行的背景颜色 th 定义表格的表头(有多少列就有多少对th) 默认为加粗并居中 td 定义表格的单元格 属性: width/height 定义单元格的宽高 align 设置本行的文本的水平对齐方式 值:left(默认)/right/center valign 设置本行文本的垂直对齐方式 值:top/bottom/middle(默认) *colspan 规定单元格可以横跨的列数 *rowspan 规定单元格可以横跨的行数 thead 定义表格的头部部分 tfoot 定义表格的页脚部分 tbody 定义表格的主体部分 表单标签 form 定义一个表单 属性: action 要提交的地址(通常为服务器上的某个php文件) method 提交的方式 get(默认) 会将表单的数据显示在url地址栏 post 不会将表单的数据显示在地址栏 input 定义一个输入框 属性: type 规定输入框的类型 值: text (默认) 文本输入框 password 密码输入框 radio 单选框(name值一定要一样) checkbox 多选框 name 定义输入框的名字 button 按钮标签 html 04,3月29 十,补充两个标签 font 定义字体 属性: color 设置文字颜色 size 1~7 设置文字大小,默认为3 center 对包裹的元素进行居中 十一. 表单标签 input 属性: type text value设置默认值 passwor value设置默认值 radio 单选框 真正的值 checkbox 复选框 真正的值 file 文件上传 hidden 隐藏域(用于悄悄传输数据) submit 表单提交按钮 image 表单提交按钮,样式来自于图片,配合src使用 reset 重置表单 button 普通按钮 size 设置type为text或者password的最大 输入框宽度 maxlength 设置type为text或者password的最大输入长度(1个汉子也只是一个字符) readonly 设置type为text或者password的输入框为只读 mutiple 设置typ为file的文件上传域为多选(多文件上传) value 定义input框的值 name 定义input 注意:input 如果没有name属性,后台拿不到数据 checked 设置单选框或者多选框的默认选中 button 按钮标签 属性 submit默认值 reset 重置表单 button普通按钮 form 将按钮绑定到某个表单 注意:值一定要与表单的id一样 label 将某个元素绑定到某个表单控件上 属性: for 一定要和表单控件上的id值相对应 textarea 定义一个大文本域 属性: name 定义大文本域的名字 rows 规定大文本域最大的行数 cols 规定大文本与最大的列数 select 定义一个下拉框 属性: name 定义下拉框的名字 multipe 将下拉框定义为多选 option 下拉框中的选项 属性: value 定义下来框真正的值 selected 默认选中 fieldset 将表单项进行分组 legend 给分组的表单加个标题 disabled: 禁用表单的属性 *: 可以加载input|select|option|textarea|button上,通用属性 可以加在表单 控件里面 用于禁用某个控件 十二,表单input属性 url 必须输入一个网址(必须是一http://或者https://开头) email 必须输入一个邮箱 number 必须输入一个数字 :max, min,step input的属性 required 必须输入的选项 sutofocus 自动获取焦点 placeholder 设置提示信息 autocomplete on/off 是否使用自动功能 十三,分帧标签 frameset 设置框架集 不能与body同在 (html5 淘汰) 属性: rows 把页面分为几行 cols 把页面分为几列 frameborder 是否显示边框 0/1 border 边框的大小 frame 配合frameset使用,定义基本的框架 单标签 属性: src 本框架链接的页面 name 本框架的名字 noresize 不能调整大小(单属性) scrolling no/auto 是否显示滚动条 a a标签的target属性的值 _self _blank _top 十四, iframe 框架级 在body中加载一个行内框架 属性: src 要加载的页面地址 width/height 设置宽/高 scroling 是否显示滚动条 on/auto frameborder 是否显示边框 值: 0/1 css 01,3月30 十五,css的使用方式 1.内联式(行内式) 在标签里面添加style属性。属性值为css代码 2.内部样式(通常在head) 把css代码写在style标签对中 注意:style标签对可以放在文档的任意位置,但是建议写在head里面 3.外部样式 使用用 link标签引入外部样式的文件 。例如:link herf=“” rel=“strlesheet” 注意:文件后缀不影响,推荐使用css后缀。 4.用@import导入外部文件 例如: 注意:一定要写在style标签对或者外部文件的第一行 十六,css的基本语法 1.css语法 由选择器和声明两部分组成 选择器:你需要改变样式的html元素 声明:都被包含在{}中 每条声明都是由属性和值组成,中间用“:" 冒号隔开 最后一条声明可以省略掉“;” 分号 2.css的注释 /* 注释内容 */ 3.单位 3.1 长度单位 px 像素 屏幕显示的最小单位 em 倍数 字体大小相对与对于自己当前的字体大小的倍数 % 百分比 in 英寸 pt 磅 cm/mm 厘米/毫米 3.2 颜色单位 1.英语单词 2.16进制 3.rgb() rgeb(红,绿,蓝); 数字:rgb(0~255,0~255,0~255) 百分比:rgb() 十七,css选择器 1.通配符选择器 *{margin:0;padding:0;} 2.标签选择器 不区分大小写 li{声明} 3.class类选择器 区分大小写 同时用两个或者多个类,请用空格隔开 .class名{声明} 4.id选择器 区分大小写 页面id唯一性,一次只能用一个id,一个id只能用一次 以上的这几种都是最基本,最常用的选择器。标签名不区分大小写,类和id都区分大小写 后代选择器 爹 后代 (中间用空格隔开) 组合选择器 li,p,b{} 中间用,隔开 伪元素选择器 a :link 设置访问前的样式 a :visited 设置访问后的样式 a:hover 鼠标放在链接上没有点击的状态(最常用的) a:avtive 设置鼠标按下去还没有放开的样式 十八,选择器的优先级 标签<后代选择器<类所包裹 PHP的标记 1.标准风格(常用) 5.= 是echo的简写(常用) ='123';?> 相当于 2.长风格(废物!!!!) 3.短风格(废物!!!!) php代码 ?> 需要在php.ini中开启short_open_tag(将它设置为on,默认为off) 4.asp风格(废物!!!!) <% php代码 %> 需要在php.ini中开启asp_tag(将它设置为on,默认为off) 注意: PSR规范中,只允许使用和= ?>这两种 如果是纯php文件,标准风格的结束标记可以不写 指令分隔符 PHP中语句分为两种 1.结构定义语句 流程控制、分支、循环、函数。。。用大括号标识,可以不加分号 2.功能执行语句 输出、变量定义、函数调用。。。后面必须加上分号 提示:php的结束标记中隐含了一个分号,最后一条语句可以不加分号 PHP中的注释 注释掉的代码,PHP都会忽略解析 1.//单行注释 //注释内容。。。 2.多行注释 /* 注释内容 */ 3.#单行注释 # 注释内容。。。 PHP中对空白符的处理 PHP会忽略空格、换行、tab制表符的解析,所以可以利用这个特点写出可读性比较高的代码 要求:php代码必须要按照严格的缩进;PSR规范规定,缩进只能4个空格(因为tab制表符的宽度,编辑器解释不一样,不利于代码的移植) 三十一.变量 什么是变量? 变量是用于临时存储值的容器 值可以是数字、文本或者其他一些比较复杂数据(数组、对象) 变量的特性 PHP是弱类型的语言,不必告知变量的类型是什么,它会根据存储的值来决定这个变量是什么类型的 *变量的命名规范: 1.必须以 $开始,后面跟变量名 2.变量名由字母、数字或者下划线_组合而成 3.不能以数字开头 4.严格区分大小写 5.可以是中文,但是别让我看到这种代码,不然罚抄10000遍 三十二.八种数据类型 4种标量类型 boolean 布尔型 只有两个值,要么是true,要么是false 通常用于if判断,其他类型转换为布尔型得到false的情况: 布尔型:false 字符串:'' '0' 整型:0 -0 浮点型:0.0 数组:array() 空数组 null:null(包括未定义的变量) 其他所有值都被认为是true integer 整型 1.整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。 八进制表达,数字前必须加上0(零) 十六进制表达,数字前必须加上 0x 二进制表达,数字前必须加上 0b 2.PHP中整型的字长用PHP_INT_SIZE表示,一般占4个字节 3.整型的取值范围:PHP_INT_MAX 正负二十多个亿!超出取值范围自动转换为浮点型 -2147483647~2147483647 float 浮点型 1.浮点数,就是有小数点的数,通常用来表示整数无法表达的数值,比如金钱值、距离值、速度值 2.可以用科学计数法来表示 3.在PHP中float也有最大数,1.8e308 4.浮点数的精度有问题 5.将浮点数取整的函数 round() 四舍五入 floor() 舍去取整 ceil() 进一取整 string 字符串类型 定义方式: 1. 单引号 2. 双引号 3. heredoc 定界符方式 4. nowdoc(5.3以上) 单双引号的区别: 1、双引号可以解析变量;单引号不能解析变量,会原样输出; 2、双引号可以解析转义字符;单引号只能转义\\和\'本身; 3、单双引号都不能自己嵌套自己,可以互相嵌套 转义字符: \r 回车 \n 换行 \t 制表符 \\ 斜线本身 heredoc和nowdoc heredoc定界符可以嵌套单双引号,可以解析变量和转义字符 nowdoc可以嵌套单双引号,不能解析变量和转义字符 建议:尽量使用单引号,效率略高 2种复合类型 array 数组类型 object 对象类型 2种特殊类型 resource 资源类型 null 空 只有一个值,就是null本身 得到null的情况: 1、直接赋值为null 2、未被赋值的变量,默认值也是null 3、被unset()删除掉的变量也是null PHP中的伪类型(看手册,var_dump()),并不是PHP的原始数据类型 mixed:代表这个参数可以是多种不同的类型 number:代表这个参数可以是int或者float pow() callback:还有个别名叫callable,代表这个参数必须是一个函数(回调函数) call_user_func()、session_set_save_handler() void:代表这个函数不接收任何参数;如果作为返回值,表示这个返回值是无用的 time( void ) var_dump() unset() PHP中的类型转换 强制转换 (int)/(integer) 强制转换为整型 (bool)/(boolean) 强制转换为布尔型 (float) 强制转换为浮点型 (string) 强制转换为字符串 (array) 强制转换为数组 (object) 强制转换为对象 (unset) 强制转换为null 自动转换 布尔环境 数值环境 字符串环境 三十三.数据类型的判断: is_bool() 检测变量是否是布尔型 is_string() 检测变量是否是字符串类型 is_int() 检测变量是否是整型 is_float() 检测变量是否是浮点型 is_array() 检测变量是否是数组类型 is_object() 检测变量是否是对象类型 is_resource() 检测变量是否是资源类型 is_null() 检测变量是否是null空类型 is_scalar() 检测变量是否是标量类型(int、float、string、boolean) is_numeric() 检测变量是否是数字或数字字符串 gettype($a) 获取变量的类型 settype($a, 'bool') 设置变量的类型(类似于强制转换) 三十四.常量 常量 汉语字典中第1条解释:长久,经久不变,常量也就是恒量 一经定义,不能删除和改变。 常量的定义: define define('常量名', 常量值); const const 常量名 = '常量值'; 常量名: 和变量名一样,只能是数字、字母或下划线; 不能以数字开头 (定义的时候可以,但用不了) 严格区分大小写(define可以通过第3个参数指定是否区分大小写,true不区分) 常量值: define定义的常量,除了object之外,都可以;(数组是PHP7新加的) const定义的常量值,不能是资源和对象; define和const的区别: const可在类中使用,define不能 const不能在条件语句中定义常量 const采用一个普通的常量名称,define可以采用表达式作为名称 const只能接受静态的标量,而define可以采用任何表达式 const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。 提示:echo一个未定义的常量时,会报一个notice并将常量名自动转换为字符串输出; defined(常量名) 用于检测常量是否定义 预定义常量:get_defined_constants()获取当前已经定义好的常量! PHP_INT_MAX PHP_INT_SIZE PHP_VERSION ... 魔术常量: 值会随着环境的变化而改变 __LINE__ 当前行号 __FILE__ 当前文件 __DIR__ 当前文件的目录 __CLASS__ __METHOD__ __NAMESPACE__ 。。。 三十五.运算符 运算符是可以通过给出的一个或多个值来产生另一个值的东西; 有3种类型的运算符 一元运算符 只能够接收1个值参与运算的叫一元运算符 1 -1 负值运算符 ++ -- ! 二元运算符 2 + 2 算术运算符 + - * / 三元运算符 3 可以接收3个值的就是三元运算符 ?: 表达式1 ? 表达式2 : 表达式3; 算数运算符 + - * / % 取余(取模)运算 39 % 3 == 0 求两个数相除的余数;39除以3余数为0 递增递减运算 ++ $i++; //后递增: 先返回$i,再将$i的值加1,下次用的时候值就是加1后的 ++$i; //前递增:先将$i的值加1,然后返回加过1后的$i -- $i--; //同上 --$i; 提示: 递增/递减运算符不影响布尔值 null的递减无效,递增结果为1 字符串的递减无效;++是按照Perl的语法,比如z++ 会变成aa 字符串运算符 . 将其左右参数进行拼接运算 .= 将右边参数,附加到左边参数之后 赋值运算符 = 将右边的表达式的值,赋值给左边的变量 += $a += 3; //将$a加上3之后再赋值给$a,可以拆为$a = $a + 3; -= *= /= %= 比较运算符 > 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 === 全等于 != | <> 不等于 !== 不全等于 逻辑运算符: 逻辑与:&& and 想娶你们小红姐,你要有房,并且还要有车! 洗脸:左脸和右脸 只有两边都为true,才返回true,否则返回false 逻辑或:|| or 想娶凤姐,要么你财大,要么你器粗! 丢钱包:你找到了,或者我找到了 只要有任何一边为true,结果就为true; 注意:前面为true,后边就不再执行,俗称短路 逻辑非 ! 小星星本来是纯爷们(true),去了趟泰国,被砍了一刀(false),就不纯了 就是取反的意思 $bool = true; !$bool == false 逻辑异或 xor 男(true)男(true)不能结婚; 女(false)女(false)也不能结婚 两边不一样才返回true,否则返回false 位运算符(了解) 按位与 & 按位或 | 按位异或 ^ 左移 << 右移 >> 按位非 ~ 其他运算符 ?: 三元运算符 表达式1 ? 表达式2 : 表达式3; 1为真就执行2,为假就执行3; @ 错误控制符,可以屏蔽错误 `` 执行运算符,可以执行一些操作系统的命令 //别急,讲到相应知识点的时候会补充讲解 => 数组下标指定符号 -> 对象成员访问符 instanceof 类型运算符 三十六.流程控制 1.概述 任何PHP脚本都是由语句组成的。 此外,还可以用花括号将一组语句封装成一个语句组,语句组本身可以当作是一行语句 2.在PHP中有三种基本的程序结构: 顺序结构 分支结构 循环结构 顺序结构 在程序结构中,最基本的就是顺序结构,表示程序会自上而下的顺序执行。 流程控制之分支结构: 1. 单向分支 if (表达式为true) { 执行真区间 } 2. 双向分支 if (true) { 表达式为true执行真区间 } else { 表达式为false执行假区间 } 三十七.数组 概述 简单说,就是一组数据的集合,是PHP8大类型中的一种; (比如标量在内存中是单个存储的,数组呢,就像一列火车或者地铁) 相关概念 下标:也叫做键(key)或者索引,相当于数据在该数组中的名称。 值:就是数据本身 数组的分类: 1.按照下标形式分 索引数组:下标全是数字 关联数组:下标全是字符串 混合数组:下标既有数字又有字符串 2.按照维度划分 一维数组 二维数组 三维数组 N维数组 ... 数组的定义: 方式一:array() 语言结构 array([ [key => ]val, $...]); $arr = array('name'=>'老杨', '18', '卡哇伊~~'); 方式二:array()的替代语法[]; PHP版本需要5.4+ $arr = ['name'=>'老杨', '18', '好可爱']; 方式三:直接给数组下标赋值 $arr[键] = 值; 查看数组的方式 1.var_dump()打印变量的相关信息 但是,比较复杂的数组,无法显示完整;比如:get_defined_constants() 2.print_r(),配合pre可以完整的显示所有数据 数组定义时的细节: 1.未指定下标的值,会从0开始比较,找出当前数组中最大的数字下标加1,作为自己的下标 2.如果key是浮点数,会被舍去取整!如果是一个纯洁的数字字符串,也会被转换为相应的int值! 三十八.数组的遍历: 遍历: 一栋楼 ,3层,每层10间房,分别为101-110,201-210,301-310,每个房间里住着一个美女。有人要求你进入这栋楼去找一个叫‘刘亦菲’的美女,你将怎么找? 遍历,遍,就是寻遍,找遍。遍历原意是从头到尾,或从尾到头,每个元素查验一次,不重复查验,也绝不遗漏一个。但是实际上我们做遍历,往往是,查找到目标(刘亦菲),遍不会继续浪费时间精力、资源去查验剩下的房间。 1.for循环遍历数组 只能遍历索引数组,并且数组下标还必须是连续的 2.foreach遍历数组: foreach ($数组 as $键 => $值) { } 每次开始循环,会从数组的第一个元素开始,将值拿出来赋值给$v,将键拿出来赋值给$k;直到数组被遍历完毕,结束循环 3.联合使用list()、each()、while遍历数组 list():把数组中的值赋给一些变量 注意:list只能用于下标从0开始的索引数组 each():返回数组中当前的键/值对并将数组指针向前移动一步,超出数组长度返回false! 三十九.预定义变量之超全局变量: 超全局变量:超全局变量是在全部作用域中始终可用的内置变量(语言参考->预定义变量) $_SERVER 包含了头信息、路径、脚本位置等信息的数组 $_GET 包含了通过URL的参数传过来的数据 $_POST 包含了通过POST方法传过来的数据(需要用表单发起POST请求) $_REQUEST 默认包含了GET、POST和COOKIE的数据(COOKIE后面再讲) GET和POST的区别: 1、get通过URL传输数据,随时可以查看和修改,安全性相对较低;而post不会显示在URL,相对安全 2、get传输的数据量大小会被URL的长度所限制(循环10万个1);而post传输的数据量是根据php.ini的配置文件(post_max_size),默认为8M! (友情提示:要上传大文件还需要设置upload_max_filesize,默认为2M) 建议:登录、注册等涉及到密码或者文件上传等操作的时候用POST;做搜索或者传输一些简单数据的时候一般用get $GLOBALS 包含所有全局范围的变量(包括其他的超全局变量) $_ENV 包含服务器端环境变量的数组(不常用) 默认为空,需要修改php.ini中的: variables_order = "GPCS" variables_order = "EGPCS" //加个E $_FILES、$_COOKIE和$_SESSION后面再讲 四十.系统函数 数组相关的函数: 数组的键/值操作: 1.array_values($arr) 返回数组中所有的值并给其建立数字索引 2.array_keys($arr[, '值'[, true]]) 返回数组中所有的键名 给'值'表示拿出该值的键 给'true'表示值用===判断 3.in_array('值', $arr[, true]) 判断数组中是否有某个值 给true表示用===判断 4.array_key_exists('键', $arr) 判断数组中是否有某个键 5.array_flip($arr) 键值交换 6.array_reverse($arr[, true]) 反转数组 给true表示保留原来的数字下标 统计与唯一性: count($arr[, 1]) 统计数组元素的个数 给1表示递归统计数组个数(不常用) array_count_values($arr) 统计数组中值出现的次数 注意:只能统计string或者int,否则报错 array_unique($arr) 去除数组中重复的元素,保留前面的值 使用回调函数过滤数组: array_filter($arr, callback); 会将数组中的每个值都传给回调函数,在回调函数中返回true就保留该值,返回false就不保留 数组排序函数: 1.sort() 从小到大,不保留键 (升序) 2.rsort() 从大到小,不保留键(降序) 3.asort() 从小到大,保留键 (升序) 4.arsort() 从大到小,保留键(降序) 5.ksort() 按照键,从小到大(升序) 5.krsort() 按照键,从大到小(降序) 注意:在对混合类型值排序时可能会产生不可预知的结果 拆分、合并、交差集: 1.array_slice(切谁, 开始位置[, 切几个[, 是否保留键]]) 切谁:要切的数组 开始位置:从0开始数,会保留开始位置的元素 [切几个]:没给的时候,默认切到最后 [是否保留键]:默认false,不保留;true保留原来的键 2.array_splice(&切谁, 开始位置[, 切几个[, 替代品]]) 切谁:要切的数组,是引用传递 开始位置:从0开始数,会保留开始位置的元素 [切几个]:没给的时候,默认切到最后 [替代品]:将替代品插入到原来的数组中,不会保留键 3.array_combine(键数组, 值数组) 用键数组的值作为键,值数组的值作为值; 要求两个数组的长度必须一致,否则报错并返回false 4.array_merge($arr1[, $arr2, $...]) 合并N个数组; 注意:同名的键,后面会覆盖前面的 扩充:加号也可以合并数组;同名的键会保留前面的值 5.array_intersect($arr1, $arr2[, $...]) 返回N个数组中都有的值,下标保留前面 6.array_diff($arr1, $arr2[, $...]) 返回$arr1中有,其他数组里面没有的元素,下标保持不变 数组与数据结构: array_pop() 弹出数组中最后一个元素 array_shift() 弹出数组中第一个元素 array_push() 往数组最后追加1个或多个元素 array_unshift() 往数组最前面追加1个或多个元素 数据结构:用于存放数据的容器 队列:相当于管子,先进先出(吃多了拉) 栈:相当于杯子,后进先出(吃多了吐) 随机打乱数组 range() 生成指定范围的数组 shuffle() 随机打乱数组 四十一.系统函数 指针相关 current() 返回数组当前指针的值 next() 将数组的指针移到下一个,并返回其值 prev() 将数组的指针移到上一个,并返回其值 end() 将数组的指针移到最后,并返回最后一个值 reset() 将数组的指针重置 四十二.系统函数 字符串相关 字符串常用输出: echo 输出一个或多个字符串 print 输出一个字符串 echo和print是一种语言结构,不是一个函数; 用于输出字符串等简单的数据 print_r 打印变量易于理解的信息 就是查看各种类型变量的值 var_dump 打印变量的相关信息 可以看到任意类型的值和类型 printf() 格式化输出字符串 %s 表示字符串 %b 表示二进制数 %o 表示八进制数 %d 表示十进制数 %x 表示十六进制数 %c 表示是个ascii码值 %% 表示一个单纯的% sprintf() 同上,只是将结果返回,而不是输出 笔试题之echo和print_r的区别: 1.echo是一种语言结构,不是函数,所以效率略高; 2.echo可以同时输出多个字符串,而print_r不可以 3.echo只能输出简单的数据类型,而print_r可以打印复合类型的数据,比如数组、对象等 去除和填充: ltrim($str[, '要去除的字符列表']) 默认去除左边的空格 rtrim($str[, '要去除的字符列表']) 默认去除右边的空格 trim($str[, '要去除的字符列表']) 默认去除两边的空格 str_pad($str, 长度,填充品) 用一个字符串将另一个字符串填充为指定长度 四十三. 系统函数 字符串大小写的转换: strtolower() 转换为小写 strtoupper() 转换为大写 ucfirst() 首字母大写 ucwords() 单词的首字母大写(空格区分单词) 四十四.和HTML标签处理相关的函数: htmlspecialchars() 将特殊字符转换为实体 htmlentities() 同上,基本不用 老版本里面会将中文一起转了 strip_tags() 去除html标签 nl2br 将\n换行转换为
换行 字符串反转、长度与加密: strrev() 将字符串颠倒显示 str_shuffle() 将字符串随机打乱 strlen() 统计字符串的长度,utf-8的中文占3个字节 md5() 将字符串进行加密,得到一个32位的加密后的字符串 number_format() 格式化一个数字 只能是1个、2个或者4个参数 字符串比较函数:cmp:compare的简写,比较的意思 strcmp() 比较两个字符串(区分大小写) strncmp() 比较字符串开头的若干个字符(区分大小写) strcasecmp() 比较两个字符串(不区分大小写) strncasecmp() 比较字符串开头的若干个字符(不区分大小写) 字符串的切割与连接: explode('切割符', $str) 使用一个字符串分割另一个字符串,返回一个数组 implode('连接符', $arr) 将一维数组用指定字符串连接,返回一个字符串 join() implode的别名 字符串截取: substr($str, 开始位置, 截多长); 开始位置从0开始数;为负数时表示倒着数! 字符串也有下标: 可以像数组一样通过下标取出字符串的值 但是,最好不要用来取中文 字符串的查找: 提示:用法统一都是($str, '要找的子字符串'); 1.strstr($str, '要找的字符串'); 返回从子字符串第一次出现的位置开始,到结尾的字符串; 还有个别名:strchr 2.strrchr 返回从子字符串最后一次出现的位置开始,到结尾的字符串 3.strpos($str, '要找的字符串') 返回子字符串第一次出现的索引位置,从0开始; 注意:1个汉字占3个字节 4.strrpos($str, '要找的字符串') 返回子字符串最后一次出现的索引位置 5.stripos()不区分大小写的strpos 字符串的替换 str_replace('找什么', '换成什么', '在哪儿换'); 四十五.系统函数 数学函数 ceil() 向上取整 floor() 向下取整 round() 四舍五入 max() 最大 min() 最小 mt_rand() 随机数 四十六.分支 多向分支 if (表达式1) { 表达式1为true执行真区间,这个分支就执行完了,否则继续往后 } elseif (表达式2) { 表达式2为true执行这里,这个分支就执行完了,否则继续往后 } elseif (表达式3) { 表达式3为true执行这里,这个分支就执行完了,否则继续往后 } else { 表达式为false执行假区间 } if分支的特点: 1. 所有的条件表达式最终都会被转换为布尔值,要么为true,要么为false if ('123') { true } 2. 当if后面没有花括号{}包裹的时候,只会执行1条PHP语句(了解) 3. else if中间可以加上一个或多个空格隔开(了解) 4. 流程控制有一些替代写法(了解) 4. 巢状分支(就是if嵌套) 5. switch语句的多向分支 switch (表达式) { case 值1: 语句体; case 值2: 语句体; ... default: 语句体; } switch会取出括号里的值,然后与语句体中的case所列出的值逐一比较(用==比较),如果结果为false,则将结果往下一个case传递;如果为true,则执行该case中的语句体;然后再碰到break语句即跳出switch条件判断,如果所有的值比对都不符合,则会执行default中的语句体 四十七.流程控制之循环结构: 1、while循环 while (表达式) { 循环体; } 当‘表达式’的结果为真时,程序将反复执行‘循环体’,直到表达式的结果为假时才停止执行该段程序,循环结束 2、do...while循环 do { 循环体 } while (表达式); 程序会先执行 do 里面的循环体,然后再检查表达式是否为真; 真,就再进行 do 语句体中的语句; 假,循环立马结束,不再执行循环体;继续运行后续代码 3、for循环 for (初始化语句; 条件判断语句; 每次循环后执行的语句) { 循环体; } 初始化语句:在整个循环开始前,无条件的执行一次,并且只有一次; 条件判断语句:在每次循环前都会判断,为true执行循环体,为false就终止循环 每次循环后执行的语句:每单次循环后都会执行这个语句 特殊的流程控制语句: break 跳出整个循环 continue 跳出本次循环,继续下一次循环 exit 或者 die 结束脚本执行; die; exit; die(); exit(); die('结束时输出的字符串'); exit('结束时输出的字符串'); 流程控制的替代语法: 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor; 以及 endswitch;。 do-while 只有一种语法,没有替代语法 四十八.函数是什么: 函数(function)是一段完成指定任务的已命名代码块。函数可以遵照给它的一组值或参数完成特定的任务,并且可能返回一个值。(比如循环输出10行10列的表格,或者N行N列的表格) PHP中函数分为两种: 1、自定义函数 (比如循环输出10行10列的表格,或者N行N列的表格) 2、系统函数 (比如var_dump()、time()等等) 自定义函数 1.自定义函数的格式 function 函数名([参数列表]) { 函数体; } 2.函数名的命名规则 字母、数字、下划线,不能以数字开始;不能是关键字,不能与已存在的函数重名! 函数名不区分大小写 3.函数的调用 函数名([参数列表]) 注意:函数的调用不分先后!!!! //小提示:在PHP中,只要以$符开始,就是变量;只要加()就是调用函数 函数的参数 形参 函数定义时写的参数叫形参 形参可以有默认值,默认值必须是常量表达式,不能是诸如变量、或者函数调用等 有默认值的形参应该写在形参列表的右边,不然形同虚设 实参 调用函数时传的参数叫实参 实参的传递要与形参一一对应,个数最好是一样的,不能少(形参没有默认值的时候),也不要多 函数的返回值 使用return语句可以让函数返回一个值 1、没有return语句的函数,默认返回null 2、return语句会立即终止函数的运行,函数中的后续代码不执行 四十九.检测函数是否存在 function_exists检测函数是否存在 五十.变量的作用域 —— 能够有效作用的区域 全局变量 1、在函数范围之外定义的变量叫全局变量(全局的按字面意思来说,到处都可以访问,比如函数内,C语或者Javascript言确实是的),但是,在PHP中,函数被看做一段独立的功能个体,它无法直接访问全局变量 2、在函数内想要访问全局变量 1.用关键字global将变量声明为全局的 2.通过超全局数组$GLOBALS['变量名']取下标的方式访问 这是一个特殊的变量,会在脚本运行时自动创建 局部变量 1、在函数内部定义的变量叫局部变量,该变量仅在当前函数的作用域内有效,函数调用完毕立即释放 2、在全局范围内访问局部变量 1.将局部的用global变为全局的(要在变量定义之前声明) 2.将变量当做返回值return出去 3、形参也是局部变量 静态变量 用关键字static声明静态变量 特性:静态变量只会声明一次,不会重复声明 想了解任何一个函数都需要从3个方面去分析: 功能 参数 返回值 我们写函数的时候对这3个部分也要描述清楚,怎么描述呢,注释: 参数 1、常规参数,PHP八大类型 2、伪类型参数 (语言参考-》类型-》本文档中使用的伪类型与变量) mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。 如:var_dump() print_r() number 说明一个参数可以是 integer 或者 float。 如:pow() 求次方数 callable 表示该参数需要传一个函数,还有个别名callback 如:call_user_func() session_set_save_handler() void 作为返回类型意味着函数的返回值是无用的;作为参数列表意味着函数不接受任何参数。 如:unset() 不能有返回值 time() 不接受参数 $... 表示一个函数可以接受任意个参数 如:var_dump(); (要求:自定义一个函数,将任意个参数相加并返回结果) 可变个数的参数列表 func_get_args() //返回一个数组,包含所有参数 func_num_args() //返回参数总数 func_get_arg(int) //接收一个数字参数,返回指定参数,从0开始数 函数参数的传递 1.值传递(常用) 2.引用传递 通过引用传递的参数,函数可以修改其参数的值(语言参考-》引用的解释-》引用传递) 注意:如果形参用'&$a'引用传递,调用函数时必须传变量,不能直接传值 函数的种类: 可变函数 如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它 回调函数 被当做参数传递的函数,叫回调函数 专门用来调用回调函数的函数: call_user_func('函数名'[, 参数1, 参数2...]) 匿名函数: 没有名字的函数; 通常作为回调函数传递 递归函数: 就是自己调用自己的函数 文件的包含: 可以使用自定义函数库,并且可以更好的实现代码重用! include include '文件路径'; include('文件路径'); require require '文件路径'; require('文件路径'); 区别:如果包含的文件不存在,include报warning警告级别的错误,后续代码继续执行;require报一个fatal error致命错误,后续代码不执行 include_once require_once 用法同上面的include 和require ,区别也同上 include和include_once的区别 include:包含一次就执行一次; include_once:不管包含多少次,都只会执行一次,通常用于包含有函数、或者常量等不能重复定义的文件 五十一.正则表达式 1、什么是正则表达式? 正则表达式是一个从左到右匹配目标字符串的模式 2、作用 1.用于匹配(比如匹配邮箱、手机号) 2.用于替换(可以用新的东西把符合你条件的东西给替换了) 3.用于提取想要的内容 3、学习正则的流程 1.正则的语法 2.正则的函数 正则语法 1、分隔符 在PHP中,正则表达式其实就是一个用分隔符包裹着的特殊的字符串,比如: $pattern = '/\d/'; 常用的分隔符为'/',但是不仅限于'/';分隔符可以是任意非字母、数字、非反斜线、非空白字符,比如:#、$、%。。。 2、原子 原子是组成正则表达式的最小单位,每个正则表达式最少要包含一个原子! 原子的类型: 1.普通字符做为原子 比如:0~9 a~z A~Z...等等 2.特殊字符做为原子 比如:$ . * ? ^...等等 一般标点符号和其他在正则中有意义的符号,想做为原子都需要加转义斜线\ 提示:部分标点符号不用加\也可以,但是,加了也不会出错!比如逗号, 3.非打印字符(转义字符) \r \n \t \\ ...等等 4.通用字符类型做为原子 \d 匹配0~9之间的数字 \D 匹配除了0~9之间的数字之外的 \w 匹配数字、字母、下划线 \W 匹配除了数字、字母、下划线 \s 匹配任意个空白符 \S 匹配除了空白符之外的 5.自定义原子列表 用[]自定义原子列表 比如:'/[abc]/'表示abc任何一个都可以 1.中横线-可以表示范围:1-9|a-z 2.^可以表示除了 3、元字符:拥有特殊的含义,不再单纯的表示自己 1、字符串的边界 ^ 表示匹配开始位置 $ 表示匹配结束位置 2、重复匹配: 这几个元字符表示量词,用于修饰前面一个原子的个数 ? 表示0次或1次 + 表示1次或多次 * 表示0次、1次或多次(任意次) 3、通配符:点号. 匹配除了换行符\n之外的任意一个字符 4、重复匹配之自定义量词 元字符{},用于自定义量词 {n} 表示前面的原子为n次 {n,} 表示前面的原子最少为n次,可以大于n次 {n,m} 表示前面的原子最少为n次,最多为m次 5、原子列表 [] 元字符[],用于定义原子列表(详情请见:6.正则的原子.php) 6、模式选择符 | (或者叫表达式选择符) 从|隔开的正则表达式中任意选一个来用 7、模式单元 () 元字符()可以将正则表达式变成一个单元,将表达式看成一个原子来使用 1、系统会自动将()中匹配的值存储起来,有需要时可以通过\\1、\\2、\\n或者$1、$2、$n的方式反向引用 2、不想存储()中的值,可以用?:取消存储 4、模式修正符: 对整个表达式进行修饰,如:'/abc/i' i 表示忽略大小写 U 修改量词的贪婪模式 量词默认是贪婪的,表示的数尽可能的多 x 忽略正则表达式中的空格 s 全匹配符.将匹配任意字符,包括\n换行 m 将字符串视为多行 五十二.正则函数: preg_match('正则', $str[, 匹配到的值[, 是否存储下标[, 从哪儿开始匹配]]]) 匹配到的值:第0个,为匹配到的整体字符串;之后依次放()里面匹配到的值,默认为一维数组 是否存储下标:PREG_OFFSET_CAPTURE存储下标,会将$m变为二维数组 从哪儿开始匹配:默认为0,匹配整个字符串 返回值:返回匹配次数,0次或1次 preg_match_all('正则', $str[, 匹配到的值[, 是否存储下标[, 从哪儿开始匹配]]]) 匹配到的值:第0个,为匹配到的整体字符串;之后依次放()里面匹配到的值,默认为二维数组 是否存储下标:PREG_OFFSET_CAPTURE存储下标,会将$m变为二维数组 从哪儿开始匹配:默认为0,匹配整个字符串 返回值:返回匹配次数,0次或1次 preg_replace('正则', '替换成', '在哪儿换'); 执行一个正则表达式的搜索和替换 将正则匹配到的内容替换成指定内容;如果没匹配到,返回原字符串 正则切割 preg_split(‘正则’,‘要切的字符窜’,) 用正则表达式切割字符串 五十三.错误处理 错误的分类 语法错误 这种错误最常见,但也最容易搞定;一旦出现,一行代码都不执行 运行时错误 在页面上给你报出来,有的会终止代码执行,有的不会 逻辑错误 这种错误最麻烦 错误的级别 notice 提示级别,不会影响后续代码的执行 如:输出不存在的变量 warning 警告级别,也不会终止代码执行 如:include包含文件 error 错误级别,会终止代码执行 如:语法错误或者require deprecated 反对级别,不赞成这样的使用,不会终止代码执行 如:(5.6用mysql_connect、echo mktime()) strict 语法不够严谨 处理错误: 1.用@屏蔽错误信息 有的错误屏蔽不了 2.通过配置文件php.ini控制错误的显示 phpinfo();能看到很多信息,找出php.ini的路径 display_errors display_errors = off //不显示任何错误 注意:关闭错误显示后,如果页面中有error级别的错误,服务器会直接返回500错误 error_reporting error_reporting = E_ALL //显示所有错误 问:如何设置只显示除了NOTICE之外的错误 答:方法一:error_reporting(E_ALL & ~E_NOTICE) 3.通过ini_set函数设置 ini_set('配置项', '配置值') (不是所有的选项都可以用这个函数设置,具体哪些可以设置请参考手册:附录-》php.ini配置-》php.ini配置选项列表) 4.通过error_reporting函数设置错误级别 error_reporting(0); //屏蔽所有错误 自定义错误处理: 可以通过set_error_handler函数自己接管错误处理。 注意:致命错误无法被自定义(手册中搜索set_error_handler) 记录错误日志 1、以文件的方式记录(默认) log_errors = On 开启错误日志的记录 error_log = C:/sb.txt 指定错误的路径 2、记录到操作系统日志中 error_log = syslog 指定错误的路径 我的电脑-》管理-》事件查看器-》windows日志-》应用程序 函数error_log('日志信息'),手动写日志 五十四.PHP的时间和日期 获取Unix时间戳 time() 获取当前时间戳 因为Unix操作系统的诞生,1970年为Unix元年 mktime() 获取一个指定日期的时间戳 mktime(时,分,秒,月,日,年) 没有给的参数默认为当前的! strtotime()将英文的时间日期描述转换为时间戳 修改PHP默认时区: 1、改php.ini配置文件: date.timezone = "PRC" //默认为UTC //PRC 中华人民共和国的简写 //People's Republic of China date.timezone = "Asia/shanghai"//上海 中原(Asia/Shanghai) 上海 陇蜀(Asia/Chongqing) 重庆 长白(Asia/Harbin) 哈尔滨 新藏(Asia/Urumqi) 乌鲁木齐(慢两小时) 昆仑(Asia/Kashgar) 喀什(慢两小时) 参考:五大时区的划分:http://www.niubb.net/a/2015/11-15/961925.html date.timezone = "Asia/hong_kong"//香港 2、通过ini_set函数来临时设置 ini_set('date.timezone', 'PRC'); 3、通过专门的函数来设置或者获取 date_default_timezone_set('PRC'); //获取当前的时区设置 date_default_timezone_get(); 格式化输出: date(格式字串[, 时间戳]) 格式字串中不能被识别的字符将原样显示 echo date('Y'); //4位完完整年份 echo date('m'); //月份 echo date('d'); //日 echo date('H'); //时 echo date('i'); //分 echo date('s'); //秒 y 两位数的年份 n 没有前导0的月份 j 没有前导0的日 G 没有前导0的小时 获取微秒数: microtime([true]) 给了参数true返回一个浮点数 五十五.文件系统: (函数参考-》文件系统相关扩展-》Filesystem) 当程序运行时的数据是存放在内存中的,比如变量、常量等;想要长期保存程序运行完毕所产生的数据,我们可以利用文件的方式存储到硬盘上! 文件类型: 可以通过filetype()获取一个文件的类型 windows最常见的只有dir和file 判断文件类型 is_dir(路径) //判断是否是目录 is_file(路径) //判断是否是文件 //了解 is_readable(路径) //是否可读 is_writable(路径) //是否可写 is_executable(路径) //是否可执行 文件的属性:(什么叫属性?比如大小、创建时间。。。) 检测文件或目录是否存在 file_exists(路径); 获取文件大小 filesize(文件路径); //单位为字节 获取相关时间 filectime(文件路径); //创建时间 create filemtime(文件路径); //修改时间 modify fileatime(文件路径); //访问时间 active 目录相关 常见路径格式: windows C:/www/index.php C:\www\index.php Linux /var/www/index.php 相对路径 ./index.php ../1.jpg 路径相关的函数 basename()取出路径中的文件名部分 dirname()去除路径中的文件名部分 pathinfo()获取路径中的所有信息 realpath() 获取规范的绝对路径(文件必须存在,否则返回false) 遍历目录 opendir(目录路径) 打开一个目录 readdir(资源) 读取一个目录资源,并将指针往前移,返回文件或目录名 closedir(资源) 关闭一个目录 扩充:iconv(原字符集, 目标字符集, 字符串)字符集转换 创建和删除目录 mkdir('目录'[, 权限, true]) 创建目录 在Windows中权限被忽略,Linux中0777表示最高权限 第3个true,表示递归创建目录 注意:创建的目录已存在会报错 rmdir('目录路径') 删除目录,只能删除空目录 unlink('文件路径') 删除文件 文件路径: 相对路径:./a/b/c/1.txt 绝对路径:C:\wamp\www\php15\a\b\c\1.txt 注意:http的绝对路径无法删除 文件的基本操作 touch('文件名'); 设定文件的修改时间 如果文件不存在,则会被创建。 copy(原文件名,新文件名); 只能复制一个文件,不能复制目录 rename(旧名,新名 ); 重命名一个文件,其实相当于剪切 五十六.文件操作: 打开文件+ fopen('文件路径', 打开方式); 打开方式: 'r' 只读方式打开,将文件指针指向文件头。 'r+' 读写方式打开,将文件指针指向文件头。 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 w或w+/a或a+,如果不存在会自动创建 r或r+,不会自动创建文件 写文件 fwrite(资源, '写的内容'); 写的位置由打开方式决定 读文件 fread(资源, 读的长度); 读的长度必须大于0 关闭文件 fclose(资源); 指针重置: rewind($?) 将文件指针重置到文件开头,方便读取内容 简单的文件读写:(常用) file_get_contents(文件路径) 读取文件内容,返回文件内容的字符串 file_put_contents(文件路径,写的内容[, FILE_APPEND]) 文件不存在就创建;默认为覆盖内容,可以用第3个参数设置为追加 文件上传和下载 上传用到头像、相册、网盘、资料、种子、资源等 下载资料、种子、资源、图片等 文件的上传 就是将文件从客户端上传到服务端 实现步骤: 1、表单的设置 1.要做文件上传,method必须使用post 2.必须在form标签里面加:enctype="multipart/form-data" enctype:用于指定在发送数据到服务器之前如何对表单数据进行编码 multipart/form-data:表示不对数据进行编码,以文件流(二进制)的形式上传到服务器。 application/x-www-form-urlencoded:默认选项,默认对所有字符进行编码 3."hidden" name="MAX_FILE_SIZE" value="2000"> 2、服务器端的设置 1. file_uploads = On 是否允许文件上传 2. upload_max_filesize = 2M 上传文件最大允许范围 3. post_max_size = 8M POST表单上传数据的最大允许范围 4. upload_tmp_dir ="c:/wamp/tmp" 上传文件的临时目录 注意: post_max_size的值一定要大于upload_max_filesize的值 3、PHP代码处理文件的上传 1. 上传后的数据用$_FILES接收。 2. $_FILES中每个元素的意思 name 上传的文件名 type 文件类型 tmp_name 临时文件路径 文件上传的原理:就是在脚本执行完毕之前将文件从这个临时路径里面弄出来,因为这货会在脚本执行完毕后自动删除 error 错误号 其值为 0,没有错误发生,文件上传成功。 其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 其值为 3,文件只有部分被上传。 其值为 4,没有文件被上传。 其值为 6,找不到临时文件夹。 其值为 7,文件写入失败。(比如你的临时目录没有写的权限) size 文件大小,单位为字节 执行文件上传: move_uploaded_file(临时文件名, 新文件名); 本函数检查文件是否是合法的上传文件 完整的文件上传步骤 1、判断错误号 2、判断文件的mime类型 3、判断文件的大小 4、生成随机的文件名 5、获取文件的后缀名 6、判断并执行文件上传 is_uploaded_file() 五十七.文件下载步骤: 将文件从服务器下载到客户端 注意:如果浏览器能够识别该文件的mime类型,会直接解析;如果不能识别,则提供下载 所以,我要手动告诉浏览器,这是一个附件,你不要给我解析出来 步骤: 1.告诉它是一个附件 header('Content-disposition:attachment') 2.下载的文件没内容 在php输出的内容会被下载 用readfile()读取并输出 3.结合第1步,给文件取个名字 header('Content-disposition:attachment;filename=xxoo.jpg') 4.告诉它文件的大小 header('Content-length:'.filesize('文件路径')); 5.告诉它文件的类型 header('Content-type:image/jpeg'); 五十八.数据库 数据库 数据库是计算机应用系统中的一种专门管理数据资源的系统。数据库就是一组经过计算机整理后的数据,存储在一个或者多个文件中,而管理这个数据库的软件就称为数据库管理系统。常见的软件开发中应用数据库有IBM的DB2,Oracle,SQL Server,PostgreSQL,MySQL,Access等。 DBS 数据库系统 DB 数据库 Database DBMS 数据库管理系统 Database Management System DBA 数据库管理员 Database Administrator SQL结构化查询语言 SQL是一种专门用于查询和修改数据库里的数据,以及对数据库进行管理和维护的标准化语言 数据定义语言(DDL):用于定义和管理数据对象,包括数据库,数据表等。例如:CREATE,DROP,ALTER等。 数据操作语言(DML):用于操作数据库对象中所包含的数据。例如:INSERT,UPDATE,DELETE语句。 数据查询语言(DQL):用于查询数据库对象中所包含的数据,能够进行单表查询,连接查询,嵌套查询,以及集合查询等各种复杂程度不同的数据库查询,并将数据返回客户机中显示。例如:SELETE 数据控制语言(DCL):是用来管理数据库的语言,包括管理权限及数据更改。例如:GRANT,REVOKE,COMMIT,ROLLBACK等。 关系型数据库 以行和列的形式存储数据,这一系列的行和列被称为表,一堆表组成了数据库,一堆库组成了咱们的数据库服务器 mysql的连接 mysql -u用户名 -p密码 -h服务器地址 注意: 1.每个SQL命令都需要使用分号来完成 2.可以将一行命令拆成多行 3.可以通过\c、ctrl+c来取消本行命令 4.可以通过\q、exit或者quit来退出当前客户端 常见操作 显示帮助信息:\h(同help命令) 将查询后的数据立起来:\G 取消当前未完成的操作:\c 退出当前客户端:\q 显示当前服务器状态:\s 更改执行符:\d 数据库的基本操作 -- 查看所有的数据库 show databases; -- 选择数据库 use 库名; -- 创建数据库;库名已存在报错 create database 库名; create database if not exists 库名; create database 库名 default charset=utf8; --指定默认字符集 -- 删除数据库;库名不存在报错 drop database 库名; drop database if exists 库名; 表的基本操作 -- 查看所有数据表 show tables; -- 创建数据表; create table 表名( 字段1 类型, 字段2 类型, 字段2 类型 )engine=myisam default charset=utf8; 注意:字符集为utf8,少个- -- 查看表结构 desc 表名; -- 删除数据表 drop table 表名; 数据相关操作 -- 插入数据 insert into 表名 (字段1,字段2...) values(值1,值2...); -- 查看数据 select `字段1`,`字段2` from 表名; select * from 表名; -- 修改数据 update 表名 set 字段1='值1',字段2='值2'... where 条件; -- 删除数据 delete from 表名 where 条件; 注意: 1.字段名的反引号``可以省略,关键字除外; 2.所有的字符串值都需要加引号''; 3.所有修改和删除不加where条件都是耍流氓! 导出备份 -- 在cmd下操作: -- 导出指定数据库的结构和数据 mysqldump -uroot -p 库名 > 导出的路径 如:mysqldump -uroot -p gz24 > C:/gz24.sql; -- 导出指定数据库里面某张数据表的结构和数据 mysqldump -uroot -p 库名 表名 > 导出路径 -- 小技巧:库名前面加-d表示只导出结构,不导出数据 如:mysqldump -uroot -p -d gz24 > C:/gz24.sql; 还原 -- 导入1:在cmd操作 mysql -uroot -p 库名 < 要导入的文件路径 -- 导入2:在进入mysql并use了数据库的情况 source 文件路径 权限相关 -- 修改密码1:在cmd通过mysqladmin操作.密码太简单可能会有警告warning mysqladmin -uroot -p password 123 -- 修改密码2:进入mysql的情况 set password for root@localhost=password('123'); -- 修改密码3:修改mysql库中user表,改完记得刷新服务器 update user set authentication_string=password('123') where user='root'; -- 刷新服务器 flush privileges; -- 给一个用户授权,用户不存在就自动创建 grant 权限 on 库名.表名 to 用户名@主机名 identified by '密码'; -- 例子: grant all privileges on *.* to hehe@localhost identified by '123'; grant select,insert,update,delete on *.* to hehe@localhost identified by '123'; 建表相关 1、定义数据表时,会指定数据的类型,整型、浮点型、字符串、日期、枚举、集合类型 根据你里面存什么东西来选择用什么类型。 整型 tinyint 取值范围 有符号:-128 ~ 127 无符号:0 ~ 255 unsigned 占1个字节 可以用于存年龄、标记,比如商品的状态:1新添加,2表示在售中,3已下架;订单状态、性别 smallint 占2个字节 mediumint 占3个字节 int 占4个字节 取值范围 有符号:正负二十多个亿 无符号:0~40多个亿 用于计数、时间戳 bigint 占8个字节 注意: 1.存入小数会四舍五入 2.超出取值范围报错 非严格模式下,取最大值存入 3.int(5)表示的只是显示宽度,并不是限定只能插入5位数,它具体的取值范围,由类型所决定 浮点 float 6,2 9999.99 定点数和浮点数都可以使用类型名后面加(M,D)方式来表示。(M,D)表示该类型一共显示出M位数字(整数位+小数位),D为小数点后面几位 float(浮点型) double(双精度) 可以表示的范围更广,精度更高 decimal(定点数) 默认为(10,0) 比float更精确 注意: 1.当小数超出规定长度,采用四舍五入保存 2.超出整数范围,报错,无法插入 2、decimal和double的不同点 定点数如果不写精度和标度会按照decimal(10,0)来进行操作。如果超出了精度和标度, 也会进行四舍五入。定点数的存储使用二进制进行存储所以比较准确。 注意: 1、浮点数会存在误差。 2、对于精度比较敏感的数据应该用定点数来进行表示。 字符串 char和varchar很类似,都可以用来存储MySQL中较短的字符串,区别:+ 1、char列的长度为固定长度,创建表的时候声明的最大长度,可以为0~255 2、varchar值可变长度,长度为0~65535之间的值。 3、char和varchar在超出指定的长度时都会被截取到指定的字符串(非严格模式下)。 4、text和blob,二者之间的区别是blob用来保存二进制数据,text只能保存字符串数据。 5、blob和text在经过大量的删除操作之后有可能会引起性能问题。(删除以后在数据表中留下“空洞”) 可以使用 optimize table 表名 来回收这些空间。 时间戳 int 枚举类型:enum mysql> create table tt3( -> test enum('a','b') -> ); Query OK, 0 rows affected (0.03 sec) mysql> insert into tt3(test) values('a'); 注意: 1、枚举方式的取值范围需要在创建表的时候显式的指定。 2、对于1~255个成员的枚举需要占用1个字节存储对于256~65535个成员使用2个字节存储。最多存储65535个成员。 3、如果超过了枚举里面指定的值,将会插入一个‘空’,枚举类型只能从集合中选取单个的值。而不能一次选去多个值。 4、enum的值不区分大小写 集合类型 mysql> create table t3( -> col set('a','b','c','d')+ -> ); 注意: 1、set类型可以在里面保存0~64个成员,根据成员的不同所占空间的大小也不同 1~8 1 9~16 2 17~24 3 25~32 4 33~64 8 2、set和enum除了存储之外,主要区别在于set类型可以一次选取多个成员,enum只能选取一个。 mysql> insert into t3(col) values ('a,b,c'); 注意: 1、重复的成员只保留一个。 2、超出范围的成员将会忽略。 3、插入值的时候应该都带引号。 总结: int 4个字节 正负20多个亿或者0~40多个亿 tinyint 1个字节 正负127左右 或者 0~255 decimal(10,2) 最多10位,其中有两位小数:99999999.99 char(32) 定长 varchar(255) 不定长 length + 1 约束条件:对字段进行一些约束用的 1、null、not null,插入值时没有在字段中插入一个值,默认为null。 指定not null必须在插入值时在该字段中插入一个值。如果不给插入一个值那么为”空“ 2、default 默认值在不插入该字段时默认插入的值。 整型的约束条件: 1、zerofill表示0填充。一般和整型后面设定的宽度一起使用,如果数值长度小于指定的长度那么将会在前面补充相对应的0进行填充。 2、unsigned(无符号)如果要在字段里面保存非负数,或者较大上限的值时可使用该约束条件,将从0开始,需要在字段类型后面紧跟着定义unsigned mysql> create table t9( -> id int unsigned not null, -> name char(32) -> ); 3、auto_increment,自增,在产生一个唯一的标识或顺序值的时候,可以利用这个约束条件。这个约束条件只能用于整数类型,值一般从1开始。 每行加1,插入一个null到一个auto_increment列时,MySQL将插入一个比出现过的最大值+1的值。一个表中只能有一个auto_increment列,并且必须定义为primary key或unique才能够使用 mysql> create table t1( -> id int unsigned auto_increment primary key, -> name char(32) -> ); 索引 索引是数据库中用来提高搜索性能的。我们通常在做数据库优化的时候通常先做索引的优化,数据量少的时候没效果,数据越多效果越明显。索引加上之后是自动创建的,不是我们刻意去使用的。 索引的分类: 1、常规索引(index),最基本的索引,没有任何限制 创建索引: create table 表名( 字段....., index 索引名 (要索引的字段) ); mysql> create table t2( -> id int unsigned, -> name char(32) -> ,index id(id) -> ); 表已经创建的情况下: create index 索引名 on 表名(要加索引的字段); mysql> create index id on t3(id); 删除索引: drop index 索引名 on 表名 2、唯一索引(unique)与普通索引相似,但是索引列里面的值必须是唯一的,允许有空值 创建索引: create table 表名( 字段...., unique 索引名(要索引的字段) ); mysql> create table t4( -> id int unsigned, -> name char(32), -> unique id(id) -> ); 表已经创建的情况下: create unique index 索引名 on 表名(要索引的字段) mysql> create unique index id on t5(id); 删除索引: drop index 索引名 on 表名 3、主键索引(primary key),和唯一索引类似,也是唯一的,一个表只能有一个主键 创建索引: create table 表名( id int unsigned auto_increment primary key, name char(32) ); 删除索引: alter table 表名 drop primary key mysql> alter table t7 drop primary key; 注意:如果主键的字段上面有自增(auto_increment)那么需要先将auto_increment去掉。然后再删除。 alter table 表名 change 自增的列 自增的列 类型 mysql> alter table t6 change idaaaaa id int primary key; -- 存储引擎 mysql中常用的存储引擎就两种:myisam和innodb 基本的差别: 1.myisam不支持事物处理、外键等高级特性,而innodb支持 2.myisam强调的是性能,其执行速度比innodb略快 3.myisam是表锁,innodb是行锁 -- 字符集的设置 mysql的字符集分为4个级别: 服务器级别 库级别 表级别 字段级别 库级别 1.查看数据库的字符集 show create database 库名; 2.建库的时候指定字符集 create database 库名字 default charset=utf8; 3.修改库的字符集 alter database 库名字 default charset=utf8; 表级别: 1.查看表的字符集 show create table 表名字; 2.建表的时候指定字符集 参考之前的 3.修改表的字符集 alter table 表名字 default charset=utf8; 注意:没有指定字符集的时候,默认是向上继承 -- 表的修改 1.修改表的名字 alter table 旧表名 rename 新表名 -- 2.改字段的类型 alter table s1 modify name char(30) not null; -- 3.改字段名 alter table s1 change username name varchar(30) default 'no'; -- 4.添加新字段 alter table s1 add sex enum('m', 'w', 'y') not null default 'm'; alter table s1 add des varchar(255) first; alter table s1 add des2 varchar(255) after id; -- 5.删除字段 alter table s1 drop des2; -- *6.修改表的存储引擎 alter table 表名字 engine=myisam; -- *7.修改表的字符集 alter table 表名字 charset=utf8; alter table 表名字 default charset=utf8; -- 数据操作语言(DML) 1.insert 增 1.可以插入单条语句 insert into 表名 value(); 2.插入多条语句 insert into 表名 values(),()...; 3.指定字段 insert into 表名(字段1,字段2...) values(),(); 注意:没有指定字段的情况下,必须将所有的字段都一一赋值 2.update 改 update 表名 set 字段1=值1,字段2=值2... where 条件; 3.delete 删 delete from 表名 where 条件; -- 数据查询语言(DQL) select语句 1.查询所有 select * from 表名; 2.查询指定字段 select 字段1,字段2... from 表名; 3.给字段指定别名 select 字段1 as 别名,字段2 from 表名; -- as可以省略 select 字段1 别名,字段2 from 表名; 5.在select中使用表达式 运算符:+ - * / % 函数: md5() md5加密 password() mysql的加密 unix_timestamp() Unix时间戳(和php中time()返回的一样) concat() 将两个字段连接查询 6.where条件 and 和 or is null 和 is not null between 和 not between select * from exam_type where id between 3 and 10; like 和 not like _ 表示任意的单个字符 % 表示任意个字符 select * from exam_user where username not like '%强'; in 和 not in select * from exam_user where id not in(1,2,2,3,4,3,432,423,4,234,32); 排序 order by 字段[ asc];(默认升序) order by 字段 desc;(倒序) 限定条数 limit 5; 只查5条 limit 5,5;跳过5条,取5条 分页公式: (当前页-1) * 每页显示条数 五十九.误删除root用户或者忘记mysql密码 在误删root用户或者忘掉root密码的时候咋办?别急,哥来告诉你,按照以下步骤就能搞定:(前提得是自己的mysql服务器) 1.在my.ini中的[mysqld]模块下添加 skip-grant-tables并重启,表示跳过权限表的加载 //扩充,这一步还有另一个方法: 停止mysql服务后,在cmd用mysqld命令开启安全服务,之后也可以直接进行下面的步骤: mysqld --skip-grant-tables 关键是操作完毕后要记得关闭安全服务,不然mysql服务无法启动: mysqladmin shutdown 2.重启后登录数据库:mysql 3.找到mysql库的user表,添加数据: insert into user(user,ssl_cipher,x509_issuer,x509_subject) values('roots','','',''); 添加完成后,对该root用户更新权限,更新权限命令如下: update user set Host='localhost',select_priv='y', insert_priv='y',update_priv='y', Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root'; 4.执行完成后,更新权限并退出数据库。 flush privileges; exit; 5.注释掉skip-grant-tables参数,重启数据库,就可以使用root登录了,默认没有设置密码! 五十九 .POD 面向对象编程 —— OOP(Object-Oriented Programming) 面向对象的三大特征 封装、继承、多态 对象 万事万物皆对象 客观存在的任何一个实体 类 对相同或相似对象的一种抽象描述 类与对象 通常先有类,通过类实例化出对象;大多数情况下使用的是对象 类的定义格式 class 类名 { [成员属性] —— 相当于变量 可以有默认值 不能是变量 可以是常量 可以有运算 5.6+ 值可以是任意类型 [成员方法] —— 相当于函数 和以往的函数一致 可以直接访问自己的成员属性($this) } 类的实例化 new $对象名 = new 类名; $对象名 = new 类名(); 每次new都会得到一个新对象 都会触发构造方法 对象成员访问符 -> $对象名->属性名; //加了$,含义不一样 $对象名->方法名(); 伪变量 $this 类型是一个对象,表示的是自己 不能在类外使用 魔术方法 构造方法 __construct() 在使用new关键字得到新对象的时候 析构方法 __destruct() 在销毁对象的时候。脚本执行完毕,会自动销毁对象 对象的比较 = 取别名,不会产生新对象 == 判断是否是同一个类的实例,并且属性和值是否相同 === 判断两个对象是否是同一个对象 PDO的基本使用 封装 三个关键字 public、protected、private 三个范围 自己、家族、外部 3P表 自己 家族 外部 public Y Y Y protected Y Y N private Y N N 魔术方法 __construct构造方法(可能会看到和类名同名的方法) 触发时机:使用new关键字得到新对象的时候 参数:可有可无 __destruct析构方法 触发时机:销毁对象的时候 参数:不能有 __set 触发时机:在给一个没有权限访问或者不存在的属性赋值的时候 参数:2个(要赋值的属性名,值) __get 触发时机:在获取一个没有权限访问或者不存在的属性的时候 参数:1个(要获取的属性名) __isset 触发时机:在使用isset函数检测一个没有权限访问或不存在的属性的时候 参数:1个(要检测的属性名) __unset 触发时机:在使用unset函数删除一个没有权限访问或不存在的属性的时候 参数:1个(要删除的属性名) __call 调用没有权限访问或者不存在方法的时候 __callStatic 调用没有权限访问或者不存在静态方法的时候 __toString 将对象当做字符串输出的时候 __invoke 将对象当做函数调用的时候 __sleep 使用serialize串行化对象的时候 __wakeup 使用unserialize反串行化的时候 __clone 使用clone关键字克隆对象的时候 __autoload 在使用不存在的类的时候 唯一一个写在类外的方法 extends 用于继承 父类 被其他类继承的类,也叫基类 子类 继承其他类的类,也叫派生类 继承本身的特性 PHP只支持单继承 只能有一个爹 PHP可以被多个继承 一个爹可以有多个儿子 PHP支持多层继承 可以有祖孙关系 属性的继承 子类会覆盖父类的同名属性,私有除外 权限只能扩大,不能缩小 父类 子类 public public protected public protected private public protected private 访问的一定是覆盖后的结果,私有的无法覆盖 方法的继承 子类会覆盖父类的同名方法,私有除外 权限只能扩大,不能缩小 父类 子类 public public protected public protected private public protected private 访问的一定是覆盖后的结果,私有的无法覆盖 建议:重写父类的方法的时候,参数结构(个数,是否有默认值)保持一致; 可以通过parent关键字调用父类的方法 要求:重写构造方法的时候,务必先调用一次父类的构造方法,保证基类正常运行 parent::__construct(); 父类名::__construct(); 关键字 final 可以修饰类和方法 被修饰的类不能被继承,方法不能被重写 static 可以修饰方法和属性,不能修饰类 静态方法里面不能出现$this 静态方法里面只能访问静态的成员属性 self::$属性名 类名::$属性名 const 在类里面定义常量 self::常量名 类名::常量名 instanceof(运算符) 检测该对象是否是该类的实例 抽象类:制定规范 包含抽象方法的类就是抽象类 必须用abstract来修饰 抽象类是一个半成品,不能直接实例化 必须继承并且子类要实现所有的抽象方法 可以有自己的普通方法 抽象方法 没有方法体的方法 必须用abstract来修饰 必须以分号结尾 不能是private和static 接口:制定规范 定义格式 interface 接口名{ [常量] [抽象方法] } 特性 接口里面所有都是抽象方法,不需要用abstract修饰 接口与类之间是实现(implements)关系,可以多实现(用逗号隔开) 接口与接口之间是继承关系 类在继承其他类的同时还可以实现接口(多实现) 和抽象类的区别 如果只是单纯的定义规范,两种都可以 如果定义规范的同时还要共享一些方法,就必须是抽象类 多态:不同的对象做相同的事情得到不同的结果 和类相关的函数 1. class_alias('旧类名', '新类名'); 给类名取个别名 2. method_exists(对象或者类名, '方法名'); 检测对象或者类(不受封装限制)中的方法是否存在 3. property_exists(对象或者类名, '属性名') 检测对象或者类中的属性是否存在,父类的私有属性无法检测 4. class_exists('类名') 检测类是否存在 5.get_object_vars(对象) 获取对象中有权限访问的成员属性,返回一个数组 6.get_class_methods(类名或者对象) 获取类或者对象中有权限访问的方法,返回一个数组 7.get_parent_class('子类名'); 获取父类类名 try-catch和异常类 $e = new Exception('胖子固有一死,或重于泰山,或重于其他山'); try { echo 123; throw $e; echo 321; //无法执行到 } catch (Exception $e) { echo $e->getMessage(); }
这是我的个人笔记希望对大家有帮助,
html 01, 3月27
一. 可以写在head头部的标签
1.title
用于定义网页的标题
2.meta
用于定义页面描述的相关信息
常用属性:
1.charset 用于设置网页字符集
值: utf-8 gbk gb2312
2.content 定义与 http-equiv 或 name 属性相关的元信息
3.name 将content的值关联到一个名称
值:
author 定义网页的作者
keywords 定义网站关键字
description 定义网站描述
4.http-equiv 将content的值关联到http的头部
常用的值:
content-type 定义文档的字符集
refresh 刷新或者跳转页面
3.link标签
用于定义两个文档的关系,通常用于导入一个css文件
常用属性
rel 定义两个文档之间的关系
css文件:stylesheet
icon小图标: icon
href 定义文件的地址
实例:
4.script标签
用于执行js文件
常用属性
src 外部js文件的地址
实例:
5.style标签
二.HTML中的文本标签
h族 标题标签
h1~h6 数字越大,字体越小
p 段落标签
b 定义粗体文本
strong 表示重要,用粗体显示
i 定义斜体文本
em 表示强调,用斜体显示
sub 下标
sup 上标
button 按钮标签
三 超链接标签 a
属性
href 指定跳转地址
注意:
1.值为空默认为刷新当前页
2.要跳转网络地址,一定要加上http://协议
target 指定跳转方式
值:
_self 在本页面打开(默认)
_blank 在新窗口打开
_top和其他分帧的name值,以后再讲
name 用于锚点跳转
锚点跳转:a标签href的值一定要与另一个a标签的name值或者其他标签的id值一毛一样
四.路径
1.相对路径
从当前访问的文件出发
./ 当前目录
../ 上一级目录
../../ 上上级目录
../../../../../ 点到盘符为止
2.绝对路径
指的是完整的路径
http://www.baidu.com
file:///D:/wamp/www/1.html
html 02, 3月28
五.图片和图像映射
img 标记一张图片
属性:
src 图片路径(相对或者绝对)
alt 图片加载失败的时候显示的文字
title 给图片加描述
width/height 设置图片的宽高
align 设置图片在本行中的位置
值:top/bottom/left/right
usemap 定义图片映射,和map标签的name值相对应
map 用于图像映射
属性:
name name的值用于配合img标签中的usemap属性
area 定义图像映射的区域
属性
shape 映射的形状
default 规定全部区域。
rect 定义矩形区域。
circ 定义圆形。
poly 定义多边形区域。
coords 配合shape使用,确定可点击区域的坐标
href 点击区域要去的地址
target 打开方式
六.音频标签
七.视频标签
八,音频标签
source
定义音频或者视频的媒介资源
属性:
src 定义媒介资源的路径
会从资源列表中找出一个可解析的资源
九.表格标签
table 定义个表格
属性:
border 定义表格的边框,值是边框的宽度
width 定义表格的宽度
cellspacing 定义每个单元格之间的空白距离
cellpadding 定义每个单元格内容与边框之间的距离
bgcolor 设置表格的背景颜色
align 设置表格的水平位置
值:left(默认)/right/center
caption 定义表格的标题
tr 定义表格的行(有多少行就有多少对tr)
属性:
height 设置行的高度
align 设置本行的文本的水平对齐方式
值:left(默认)/right/center
valign 设置本行文本的垂直对齐方式
值:top/bottom/middle(默认)
bgcolor 设置本行的背景颜色
th 定义表格的表头(有多少列就有多少对th)
默认为加粗并居中
td 定义表格的单元格
属性:
width/height 定义单元格的宽高
align 设置本行的文本的水平对齐方式
值:left(默认)/right/center
valign 设置本行文本的垂直对齐方式
值:top/bottom/middle(默认)
*colspan 规定单元格可以横跨的列数
*rowspan 规定单元格可以横跨的行数
thead 定义表格的头部部分
tfoot 定义表格的页脚部分
tbody 定义表格的主体部分
表单标签
form 定义一个表单
属性:
action 要提交的地址(通常为服务器上的某个php文件)
method 提交的方式
get(默认) 会将表单的数据显示在url地址栏
post 不会将表单的数据显示在地址栏
input 定义一个输入框
属性:
type 规定输入框的类型
值:
text (默认) 文本输入框
password 密码输入框
radio 单选框(name值一定要一样)
checkbox 多选框
name 定义输入框的名字
button 按钮标签
html 04,3月29
十,补充两个标签
font 定义字体
属性:
color 设置文字颜色
size 1~7 设置文字大小,默认为3
center 对包裹的元素进行居中
十一. 表单标签
input
属性:
type
text value设置默认值
passwor value设置默认值
radio 单选框 真正的值
checkbox 复选框 真正的值
file 文件上传
hidden 隐藏域(用于悄悄传输数据)
submit 表单提交按钮
image 表单提交按钮,样式来自于图片,配合src使用
reset 重置表单
button 普通按钮
size 设置type为text或者password的最大 输入框宽度
maxlength 设置type为text或者password的最大输入长度(1个汉子也只是一个字符)
readonly 设置type为text或者password的输入框为只读
mutiple 设置typ为file的文件上传域为多选(多文件上传)
value 定义input框的值
name 定义input
注意:input 如果没有name属性,后台拿不到数据
checked 设置单选框或者多选框的默认选中
button 按钮标签
属性
submit默认值
reset 重置表单
button普通按钮
form 将按钮绑定到某个表单
注意:值一定要与表单的id一样
label 将某个元素绑定到某个表单控件上
属性:
for 一定要和表单控件上的id值相对应
textarea 定义一个大文本域
属性:
name 定义大文本域的名字
rows 规定大文本域最大的行数
cols 规定大文本与最大的列数
select 定义一个下拉框
属性:
name 定义下拉框的名字
multipe 将下拉框定义为多选
option 下拉框中的选项
属性:
value 定义下来框真正的值
selected 默认选中
fieldset 将表单项进行分组
legend 给分组的表单加个标题
disabled: 禁用表单的属性
*: 可以加载input|select|option|textarea|button上,通用属性 可以加在表单 控件里面 用于禁用某个控件
十二,表单input属性
url 必须输入一个网址(必须是一http://或者https://开头)
email 必须输入一个邮箱
number 必须输入一个数字 :max, min,step
input的属性
required 必须输入的选项
sutofocus 自动获取焦点
placeholder 设置提示信息
autocomplete on/off 是否使用自动功能
十三,分帧标签
frameset 设置框架集 不能与body同在 (html5 淘汰)
属性:
rows 把页面分为几行
cols 把页面分为几列
frameborder 是否显示边框 0/1
border 边框的大小
frame 配合frameset使用,定义基本的框架 单标签
属性:
src 本框架链接的页面
name 本框架的名字
noresize 不能调整大小(单属性)
scrolling no/auto 是否显示滚动条
a
a标签的target属性的值
_self
_blank
_top
十四, iframe 框架级
在body中加载一个行内框架
属性:
src 要加载的页面地址
width/height 设置宽/高
scroling 是否显示滚动条 on/auto
frameborder 是否显示边框 值: 0/1
css 01,3月30
十五,css的使用方式
1.内联式(行内式)
在标签里面添加style属性。属性值为css代码
2.内部样式(通常在head)
把css代码写在style标签对中
注意:style标签对可以放在文档的任意位置,但是建议写在head里面
3.外部样式 使用用 link标签引入外部样式的文件 。例如:link herf=“” rel=“strlesheet”
注意:文件后缀不影响,推荐使用css后缀。
4.用@import导入外部文件
例如:
注意:一定要写在style标签对或者外部文件的第一行
十六,css的基本语法
1.css语法
由选择器和声明两部分组成
选择器:你需要改变样式的html元素
声明:都被包含在{}中
每条声明都是由属性和值组成,中间用“:" 冒号隔开
最后一条声明可以省略掉“;” 分号
2.css的注释
/* 注释内容 */
3.单位
3.1 长度单位
px 像素 屏幕显示的最小单位
em 倍数 字体大小相对与对于自己当前的字体大小的倍数
% 百分比
in 英寸
pt 磅
cm/mm 厘米/毫米
3.2 颜色单位
1.英语单词
2.16进制
3.rgb()
rgeb(红,绿,蓝);
数字:rgb(0~255,0~255,0~255)
百分比:rgb()
十七,css选择器
1.通配符选择器 *{margin:0;padding:0;}
2.标签选择器 不区分大小写
li{声明}
3.class类选择器 区分大小写
同时用两个或者多个类,请用空格隔开
.class名{声明}
4.id选择器 区分大小写
页面id唯一性,一次只能用一个id,一个id只能用一次
以上的这几种都是最基本,最常用的选择器。标签名不区分大小写,类和id都区分大小写
后代选择器
爹 后代 (中间用空格隔开)
组合选择器
li,p,b{}
中间用,隔开
伪元素选择器
a :link 设置访问前的样式
a :visited 设置访问后的样式
a:hover 鼠标放在链接上没有点击的状态(最常用的)
a:avtive 设置鼠标按下去还没有放开的样式
十八,选择器的优先级 二十,背景属性 统一设置背景: 4.text-decoration 设置下划线,上划线,贯穿线 9.cursor 设置鼠标样式 10列表属性 二十二,布局。 1.盒子模型 2 padding 和margin 内/外边距 padding-top 上内边距 margin 外边距 参数用法 和内边距一样 display:none,彻底隐藏,不保留任何物理空间 CSS 03 ,4月1 css中的布局方式 以下4个属性,一定要设置定位后才有效 二十五.position 定位 以下4个属性,一定要设置定位后才有效 二十六.固定定位 z-index 设置元素的堆叠层级 position属性 二十七,坑 溢出隐藏 溢出隐藏 /*溢出显示滚动条*/ .子元素浮动时候,父元素的高度就不会被撑开了 二十八.水平居中 二十九.垂直居中 margin-left:-100px;容器的宽度的一半,用负值 三十,什么是PHP? PHP能干什么? PHP的特点 PHP的发展史 第一个PHP文件 HTML中嵌套PHP代码: PHP的标记 注意: 指令分隔符 PHP中的注释 PHP中对空白符的处理 三十一.变量 变量的特性 *变量的命名规范: 三十二.八种数据类型 integer 整型 float 浮点型 string 字符串类型 转义字符: heredoc和nowdoc 建议:尽量使用单引号,效率略高 PHP中的伪类型(看手册,var_dump()),并不是PHP的原始数据类型 PHP中的类型转换 三十三.数据类型的判断: is_scalar() 检测变量是否是标量类型(int、float、string、boolean) gettype($a) 获取变量的类型 三十四.常量 常量的定义: 常量名: define和const的区别: 提示:echo一个未定义的常量时,会报一个notice并将常量名自动转换为字符串输出; defined(常量名) 预定义常量:get_defined_constants()获取当前已经定义好的常量! 魔术常量: 三十五.运算符 递增递减运算 字符串运算符 赋值运算符 比较运算符 逻辑运算符: 位运算符(了解) 其他运算符 //别急,讲到相应知识点的时候会补充讲解 三十六.流程控制 顺序结构 流程控制之分支结构: 2. 双向分支 查看数组的方式 数组定义时的细节: 三十八.数组的遍历: 遍历,遍,就是寻遍,找遍。遍历原意是从头到尾,或从尾到头,每个元素查验一次,不重复查验,也绝不遗漏一个。但是实际上我们做遍历,往往是,查找到目标(刘亦菲),遍不会继续浪费时间精力、资源去查验剩下的房间。 1.for循环遍历数组 2.foreach遍历数组: 三十九.预定义变量之超全局变量: $_SERVER 包含了头信息、路径、脚本位置等信息的数组 GET和POST的区别: $GLOBALS 包含所有全局范围的变量(包括其他的超全局变量) $_ENV 包含服务器端环境变量的数组(不常用) $_FILES、$_COOKIE和$_SESSION后面再讲 注意:在对混合类型值排序时可能会产生不可预知的结果 拆分、合并、交差集: 2.array_splice(&切谁, 开始位置[, 切几个[, 替代品]]) 3.array_combine(键数组, 值数组) 4.array_merge($arr1[, $arr2, $...]) 扩充:加号也可以合并数组;同名的键会保留前面的值 5.array_intersect($arr1, $arr2[, $...]) 6.array_diff($arr1, $arr2[, $...]) 数组与数据结构: 数据结构:用于存放数据的容器 四十一.系统函数 指针相关 print_r 打印变量易于理解的信息 笔试题之echo和print_r的区别: 去除和填充: 四十三. 系统函数 字符串大小写的转换: 四十四.和HTML标签处理相关的函数: 字符串反转、长度与加密: 字符串比较函数:cmp:compare的简写,比较的意思 字符串的切割与连接: 字符串截取: 字符串也有下标: 字符串的查找: 字符串的替换 四十五.系统函数 数学函数 max() 最大 if分支的特点: 4. 巢状分支(就是if嵌套) 5. switch语句的多向分支 四十七.流程控制之循环结构: 当‘表达式’的结果为真时,程序将反复执行‘循环体’,直到表达式的结果为假时才停止执行该段程序,循环结束 2、do...while循环 程序会先执行 do 里面的循环体,然后再检查表达式是否为真; 3、for循环 特殊的流程控制语句: 流程控制的替代语法: 四十八.函数是什么: PHP中函数分为两种: 自定义函数 函数的参数 函数的返回值 四十九.检测函数是否存在 五十.变量的作用域 —— 静态变量 想了解任何一个函数都需要从3个方面去分析: 可变个数的参数列表 函数参数的传递 注意:如果形参用'&$a'引用传递,调用函数时必须传变量,不能直接传值 函数的种类: 回调函数 匿名函数: 递归函数: 文件的包含: include_once 五十一.正则表达式 正则语法 常用的分隔符为'/',但是不仅限于'/';分隔符可以是任意非字母、数字、非反斜线、非空白字符,比如:#、$、%。。。 原子的类型: 3、元字符:拥有特殊的含义,不再单纯的表示自己 1、系统会自动将()中匹配的值存储起来,有需要时可以通过\\1、\\2、\\n或者$1、$2、$n的方式反向引用 4、模式修正符: 五十二.正则函数: preg_match_all('正则', $str[, 匹配到的值[, 是否存储下标[, 从哪儿开始匹配]]]) preg_replace('正则', '替换成', '在哪儿换'); 正则切割 五十三.错误处理 处理错误: 自定义错误处理: 记录错误日志 函数error_log('日志信息'),手动写日志 修改PHP默认时区: //获取当前的时区设置 格式化输出: echo date('Y'); //4位完完整年份 y 两位数的年份 获取微秒数: microtime([true]) 文件类型: 判断文件类型 //了解 文件的属性:(什么叫属性?比如大小、创建时间。。。) 目录相关 遍历目录 扩充:iconv(原字符集, 目标字符集, 字符串)字符集转换 创建和删除目录 rmdir('目录路径') 删除目录,只能删除空目录 unlink('文件路径') 删除文件 文件的基本操作 五十六.文件操作: 文件上传和下载 文件的上传 2、服务器端的设置 3、PHP代码处理文件的上传 执行文件上传: 完整的文件上传步骤 五十七.文件下载步骤: 所以,我要手动告诉浏览器,这是一个附件,你不要给我解析出来 步骤: 五十八.数据库 SQL结构化查询语言 数据定义语言(DDL):用于定义和管理数据对象,包括数据库,数据表等。例如:CREATE,DROP,ALTER等。 关系型数据库 mysql的连接 常见操作 数据库的基本操作 表的基本操作 -- 删除数据表 数据相关操作 注意: 导出备份 -- 小技巧:库名前面加-d表示只导出结构,不导出数据 还原 权限相关 -- 修改密码2:进入mysql的情况 -- 修改密码3:修改mysql库中user表,改完记得刷新服务器 -- 给一个用户授权,用户不存在就自动创建 建表相关 整型 注意: 浮点 float 6,2 9999.99 注意: 2、decimal和double的不同点 注意: 字符串 4、text和blob,二者之间的区别是blob用来保存二进制数据,text只能保存字符串数据。 时间戳 int 枚举类型:enum mysql> insert into tt3(test) values('a'); 注意: 注意: 2、set和enum除了存储之外,主要区别在于set类型可以一次选取多个成员,enum只能选取一个。 注意: 总结: decimal(10,2) 最多10位,其中有两位小数:99999999.99 char(32) 定长 约束条件:对字段进行一些约束用的 2、default 默认值在不插入该字段时默认插入的值。 整型的约束条件: 3、auto_increment,自增,在产生一个唯一的标识或顺序值的时候,可以利用这个约束条件。这个约束条件只能用于整数类型,值一般从1开始。 索引 索引的分类: mysql> create table t2( 表已经创建的情况下: 删除索引: 2、唯一索引(unique)与普通索引相似,但是索引列里面的值必须是唯一的,允许有空值 创建索引: mysql> create table t4( 表已经创建的情况下: 删除索引: 删除索引: 注意:如果主键的字段上面有自增(auto_increment)那么需要先将auto_increment去掉。然后再删除。 alter table 表名 change 自增的列 自增的列 类型 mysql> alter table t6 change idaaaaa id int primary key; -- 字符集的设置 库级别 表级别: 注意:没有指定字符集的时候,默认是向上继承 -- 数据查询语言(DQL) 排序 在误删root用户或者忘掉root密码的时候咋办?别急,哥来告诉你,按照以下步骤就能搞定:(前提得是自己的mysql服务器) 1.在my.ini中的[mysqld]模块下添加 skip-grant-tables并重启,表示跳过权限表的加载 2.重启后登录数据库:mysql 3.找到mysql库的user表,添加数据: 4.执行完成后,更新权限并退出数据库。 5.注释掉skip-grant-tables参数,重启数据库,就可以使用root登录了,默认没有设置密码! 五十九 .POD 面向对象编程 —— OOP(Object-Oriented Programming) 类的定义格式 [成员方法] —— 相当于函数 类的实例化 每次new都会得到一个新对象 对象成员访问符 -> 伪变量 $this 魔术方法 对象的比较 PDO的基本使用 封装 魔术方法 __set __isset __call __toString __sleep __clone __autoload extends 继承本身的特性 建议:重写父类的方法的时候,参数结构(个数,是否有默认值)保持一致; 关键字 抽象类:制定规范 抽象类是一个半成品,不能直接实例化 抽象方法 接口:制定规范 特性 和抽象类的区别 多态:不同的对象做相同的事情得到不同的结果 和类相关的函数 2. method_exists(对象或者类名, '方法名'); 5.get_object_vars(对象) 7.get_parent_class('子类名'); try-catch和异常类
标签<后代选择器<类
十九,字体属性
font-size 设置字体大小
tont-family 设置字体文件
font-weight 设置粗细
取值范围:100/200/300/400/500/600/700/800/900 ,临界值为600
font-style 设置是否斜体
值:italit 斜体
font
统一设置:font:[斜体] [粗细] [大小][字体] 字体和大小必须要有,同时至少有两个才生效
background
background-color 背景颜色,值颜色单位
background-image 背景图片。值url(‘图片路径’)
background-repeat 背景图片平铺方式
:
repeat 默认,都平铺
repeat-x x轴平铺
repeat-y y轴平铺
no-repeat 不平铺
round 根据款到自己拉伸图片进行平铺(css3)
backfround-pasition 背景图片的位置
left/center/right 容器内左/居中/右对齐
top/bottom 上/下
background-position:x轴 y轴
background-position:100px -100px 可以给负数
background:red url('1.jpg') 图片的位置,平铺方式等等。 参数不要求个数,不要求位置
css 02,3月31
二十一,文本的属性
1.text-indent 首行缩进
text-indent:2em 首行缩进两个字符
2.text-transform :转换大小写
(1)capitlize 首字母大写
(2)uppercass 全大写
(3)lowercase 全小写
3.word-spacing 设置词间距
值:长度单位(靠空格分一个词语)
none 没有线
underline 下划线
overline 上划线
line-through 删除线
5.text-align 文本的水平对齐方式
left/center/right
6.vertical-align 文本的垂直对齐方式
top 当前行的最顶部
bottom 当前行的最底部
100px 直接用数值
7.line-height: 一行文本的垂直居中。 值一定要和容器的高一样
8.border 边框 边框默认为px,黑色,
border-width 边框的宽度
border-color 边框颜色
border-style 边框样式
值: solid 实现 (常用)
dotted 点线
dashed 虚线
可以单独设置某一条边
border-top 上
border-top-color 上颜色
border-top-width 上宽
border-top-style 上边样式
border-letf 左
border-left-width 左宽
border-left-color 左颜色
border-left-style 左样式
border-right 右
border-right-width 右宽
border-right-color 右颜色
border-right-style 右样式
border-bottom 下
border-bottom-width 下宽
border-bottom-style 下样式
border-bottom-color 下颜色
值:poiter 变成小手
统一设置: list-style:
list-stype:none; 没有
list-style-type:
list-style-image:url()
list-style-position:
outside;在list框外
inside; 在list框内
网页布局(DI+CSS)
html额网页:标准的文档流,从从往右,从上往下
定义:任何一个元素都可以抽象成一个盒子,每个盒子可以嵌套其它盒子。
组成:元素的内容(宽高),内边距(内部白,内填充),边框,外边距(外部白,外填充)
自合模型的宽高:
盒子的宽=内容的宽+左右内边距+左右边框;
相关属性:
width/height 设置宽高
padding 内边距
border 边框
margin 外边距
padding:10px 20px 30px 40px; 内边距 上 右 下 左
padding:10px 10px;上下 左右
padding:10px 20px 30px 上 左右 下
padding-left 左内边距
padding-right 右内边距
padding-bottom 下内边距
margin-top 上外边距
margin-left 左外边距
margin-right 右外边距
margin-bottom 下外边距
3.块级元素 与行级元素
标签分为块级元素或者行级元素
1,块级元素
特点:
1.从左到右,独占一行 .
2.如果没有设置宽度,默认继承爹的宽度
3.通常块级原色可以包含其它的块级元素或者行级元素,部分标签除外。
部分标签:p,p标签千万不能套其它块级元素 h1~h6,dt.
ul,ol,table他们的子原色需要指定元素
2,行级元素
特点:
1.多个行级元素从左到右在同一行显示
2.设置宽高无效(部分标签无效),margin/padding值左右有效,上下无效。
部分标签:img/buttom/select/input/teztarea/lable 就是那么多个设置了宽/高有效的标签
3.行级元素不能嵌套其它的块级元素,只能嵌套其它的行级元素或者文本内容
3,块级与行级元素互转
display
display:block;将元素转换成块级元素
display:inline;将元素转换成行级元素
display:inline-block 将元素转换成 行级的块状元素
二十三, float 浮动
值:
left 左浮动
right 右浮动
none 不浮动
clear 清除浮动
值:
left
right
both 清除两边的浮动
1.标准文档流
从左往右、从上往下
2.浮动
浮动的盒子会脱离文档流;脱离文档流之后,其他的元素会无视它的存在;(注意:元素中的文本,依然会为它让出位置)
3.定位
二十四.定位
相对定位
relative
相对于自己原来的位置进行定位,不会脱离文档流,不会影响其他元素的布局
绝对定位
absolute
固定定位
top|bottom|left|right
相对定位 relative
相对于自己原来的位置进行定位,不会脱离文档流,不会影响其他元素的布局
绝对定位 absolute
相对于离自己最近的已经定位过的父元素进行定位,如果没找到,就相对于浏览器的左上角进行定位
会脱离文档流
固定定位 fixed
top|bottom|left|right
会脱离文档流,固定在浏览器的某个为止,不会随着滚动条的滚动而滚动
值必须为一个整数,值越大,层级越高,可以有负值
注意:必须设置position定位属性后,才可以使用
值:
relative 相对定位
absolute 绝对定位
fixed 固定定位
1.元素的垂直外边距,会重叠,取最大的值显示
2.父元素的第一个子元素的上外边距margin-top如果碰不到父元素有效的边框或者padding,就会不断一层一层的找自己‘领导’的麻烦,将自己的margin-top作用在‘领导’身上;
解决:
1.给父元素加有效的边框或者padding(不能为0px)
2.给父元素设置 overflow:hidden
/*overflow:hidden;*/
/*overflow:scroll;*/
/*自动决定是否显示滚动条*/
/*overflow:auto;*/
。反例:不要将display设置为hidden
解决:
1.让父元素也浮起来
2.给父元素加overflow:hidden;(常用)
1.让文本或者行级元素水平居中 text-align
2.让块级元素水平居中 margin:0 auto
/*经典的垂直居中做法*/
position:absolute;
top:50%;
left:50%;
margin-top:-100px;容器的高度的一半,用负值
拍黄片。
HTML:HyperText Mark-up Language 超文本标记语言
PHP(PHP:Hypertext Preprocessor )超文本预处理器,是一种运行在服务器端的脚本语言,尤其适合web开发。
收集表单数据
生成动态网页
收发cookies
跨平台运行
输出图像
文件处理
处理XML格式的数据
处理JSON格式的数据
会话跟踪
。。。。。
服务端脚本,用于写web网页(主攻)CGI
命令行脚本,CLI
编写桌面应用程序
跨平台运行
开源免费
http://www.github.com
支持大多数的web服务器
支持很大范围的数据库
1995年由Lerdorf(PHP之父)发明
1998年PHP3发布
2000年PHP4发布,开始引入面向对象的思想(半成品)
2004年PHP5发布,完全的支持面向对象思想
5.4或者5.6最稳定
2015年12月3号直接发布了PHP7,速度翻了一倍
1.环境装好之后,进入到网站根目录(www,如果不是wampserver,有可能是htdoc)
2.新建的文件后缀名一定是.php,文件名不能是中文的
3.写php代码:phpinfo();
4.在浏览器中访问文件:http://localhost:80/demo.php
1.文件后缀必须是php
2.可以嵌套到任何地方:body中、html之外、属性中、css中
3.PHP代码必须被所包裹
1.标准风格(常用)
5.= 是echo的简写(常用)
='123';?> 相当于
2.长风格(废物!!!!)
3.短风格(废物!!!!)
php代码 ?>
需要在php.ini中开启short_open_tag(将它设置为on,默认为off)
4.asp风格(废物!!!!)
<% php代码 %>
需要在php.ini中开启asp_tag(将它设置为on,默认为off)
PSR规范中,只允许使用和= ?>这两种
如果是纯php文件,标准风格的结束标记可以不写
PHP中语句分为两种
1.结构定义语句
流程控制、分支、循环、函数。。。用大括号标识,可以不加分号
2.功能执行语句
输出、变量定义、函数调用。。。后面必须加上分号
提示:php的结束标记中隐含了一个分号,最后一条语句可以不加分号
注释掉的代码,PHP都会忽略解析
1.//单行注释
//注释内容。。。
2.多行注释
/*
注释内容
*/
3.#单行注释
# 注释内容。。。
PHP会忽略空格、换行、tab制表符的解析,所以可以利用这个特点写出可读性比较高的代码
要求:php代码必须要按照严格的缩进;PSR规范规定,缩进只能4个空格(因为tab制表符的宽度,编辑器解释不一样,不利于代码的移植)
什么是变量?
变量是用于临时存储值的容器
值可以是数字、文本或者其他一些比较复杂数据(数组、对象)
PHP是弱类型的语言,不必告知变量的类型是什么,它会根据存储的值来决定这个变量是什么类型的
1.必须以$开始,后面跟变量名
2.变量名由字母、数字或者下划线_组合而成
3.不能以数字开头
4.严格区分大小写
5.可以是中文,但是别让我看到这种代码,不然罚抄10000遍
4种标量类型
boolean 布尔型
只有两个值,要么是true,要么是false
通常用于if判断,其他类型转换为布尔型得到false的情况:
布尔型:false
字符串:'' '0'
整型:0 -0
浮点型:0.0
数组:array() 空数组
null:null(包括未定义的变量)
其他所有值都被认为是true
1.整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
八进制表达,数字前必须加上0(零)
十六进制表达,数字前必须加上 0x
二进制表达,数字前必须加上 0b
2.PHP中整型的字长用PHP_INT_SIZE表示,一般占4个字节
3.整型的取值范围:PHP_INT_MAX 正负二十多个亿!超出取值范围自动转换为浮点型
-2147483647~2147483647
1.浮点数,就是有小数点的数,通常用来表示整数无法表达的数值,比如金钱值、距离值、速度值
2.可以用科学计数法来表示
3.在PHP中float也有最大数,1.8e308
4.浮点数的精度有问题
5.将浮点数取整的函数
round() 四舍五入
floor() 舍去取整
ceil() 进一取整
定义方式:
1. 单引号
2. 双引号
3. heredoc 定界符方式
4. nowdoc(5.3以上)
单双引号的区别:
1、双引号可以解析变量;单引号不能解析变量,会原样输出;
2、双引号可以解析转义字符;单引号只能转义\\和\'本身;
3、单双引号都不能自己嵌套自己,可以互相嵌套
\r 回车
\n 换行
\t 制表符
\\ 斜线本身
heredoc定界符可以嵌套单双引号,可以解析变量和转义字符
nowdoc可以嵌套单双引号,不能解析变量和转义字符
2种复合类型
array 数组类型
object 对象类型
2种特殊类型
resource 资源类型
null 空
只有一个值,就是null本身
得到null的情况:
1、直接赋值为null
2、未被赋值的变量,默认值也是null
3、被unset()删除掉的变量也是null
mixed:代表这个参数可以是多种不同的类型
number:代表这个参数可以是int或者float
pow()
callback:还有个别名叫callable,代表这个参数必须是一个函数(回调函数)
call_user_func()、session_set_save_handler()
void:代表这个函数不接收任何参数;如果作为返回值,表示这个返回值是无用的
time( void )
var_dump()
unset()
强制转换
(int)/(integer) 强制转换为整型
(bool)/(boolean) 强制转换为布尔型
(float) 强制转换为浮点型
(string) 强制转换为字符串
(array) 强制转换为数组
(object) 强制转换为对象
(unset) 强制转换为null
自动转换
布尔环境
数值环境
字符串环境
is_bool() 检测变量是否是布尔型
is_string() 检测变量是否是字符串类型
is_int() 检测变量是否是整型
is_float() 检测变量是否是浮点型
is_array() 检测变量是否是数组类型
is_object() 检测变量是否是对象类型
is_resource() 检测变量是否是资源类型
is_null() 检测变量是否是null空类型
is_numeric() 检测变量是否是数字或数字字符串
settype($a, 'bool') 设置变量的类型(类似于强制转换)
常量
汉语字典中第1条解释:长久,经久不变,常量也就是恒量
一经定义,不能删除和改变。
define
define('常量名', 常量值);
const
const 常量名 = '常量值';
和变量名一样,只能是数字、字母或下划线;
不能以数字开头 (定义的时候可以,但用不了)
严格区分大小写(define可以通过第3个参数指定是否区分大小写,true不区分)
常量值:
define定义的常量,除了object之外,都可以;(数组是PHP7新加的)
const定义的常量值,不能是资源和对象;
const可在类中使用,define不能
const不能在条件语句中定义常量
const采用一个普通的常量名称,define可以采用表达式作为名称
const只能接受静态的标量,而define可以采用任何表达式
const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
用于检测常量是否定义
PHP_INT_MAX
PHP_INT_SIZE
PHP_VERSION
...
值会随着环境的变化而改变
__LINE__ 当前行号
__FILE__ 当前文件
__DIR__ 当前文件的目录
__CLASS__
__METHOD__
__NAMESPACE__
。。。
运算符是可以通过给出的一个或多个值来产生另一个值的东西;
有3种类型的运算符
一元运算符
只能够接收1个值参与运算的叫一元运算符
1 -1 负值运算符 ++ -- !
二元运算符
2 + 2 算术运算符 + - * /
三元运算符
3 可以接收3个值的就是三元运算符
?:
表达式1 ? 表达式2 : 表达式3;
算数运算符
+ - * /
% 取余(取模)运算
39 % 3 == 0 求两个数相除的余数;39除以3余数为0
++
$i++; //后递增: 先返回$i,再将$i的值加1,下次用的时候值就是加1后的
++$i; //前递增:先将$i的值加1,然后返回加过1后的$i
--
$i--; //同上
--$i;
提示:
递增/递减运算符不影响布尔值
null的递减无效,递增结果为1
字符串的递减无效;++是按照Perl的语法,比如z++ 会变成aa
. 将其左右参数进行拼接运算
.= 将右边参数,附加到左边参数之后
=
将右边的表达式的值,赋值给左边的变量
+=
$a += 3; //将$a加上3之后再赋值给$a,可以拆为$a = $a + 3;
-= *= /= %=
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
=== 全等于
!= | <> 不等于
!== 不全等于
逻辑与:&& and
想娶你们小红姐,你要有房,并且还要有车!
洗脸:左脸和右脸
只有两边都为true,才返回true,否则返回false
逻辑或:|| or
想娶凤姐,要么你财大,要么你器粗!
丢钱包:你找到了,或者我找到了
只要有任何一边为true,结果就为true;
注意:前面为true,后边就不再执行,俗称短路
逻辑非 !
小星星本来是纯爷们(true),去了趟泰国,被砍了一刀(false),就不纯了
就是取反的意思
$bool = true;
!$bool == false
逻辑异或 xor
男(true)男(true)不能结婚;
女(false)女(false)也不能结婚
两边不一样才返回true,否则返回false
按位与 &
按位或 |
按位异或 ^
左移 <<
右移 >>
按位非 ~
?: 三元运算符
表达式1 ? 表达式2 : 表达式3;
1为真就执行2,为假就执行3;
@ 错误控制符,可以屏蔽错误
`` 执行运算符,可以执行一些操作系统的命令
=> 数组下标指定符号
-> 对象成员访问符
instanceof 类型运算符
1.概述
任何PHP脚本都是由语句组成的。 此外,还可以用花括号将一组语句封装成一个语句组,语句组本身可以当作是一行语句
2.在PHP中有三种基本的程序结构:
顺序结构
分支结构
循环结构
在程序结构中,最基本的就是顺序结构,表示程序会自上而下的顺序执行。
1. 单向分支
if (表达式为true) {
执行真区间
}
if (true) {
表达式为true执行真区间
} else {
表达式为false执行假区间
}
三十七.数组
概述
简单说,就是一组数据的集合,是PHP8大类型中的一种;
(比如标量在内存中是单个存储的,数组呢,就像一列火车或者地铁)
相关概念
下标:也叫做键(key)或者索引,相当于数据在该数组中的名称。
值:就是数据本身
数组的分类:
1.按照下标形式分
索引数组:下标全是数字
关联数组:下标全是字符串
混合数组:下标既有数字又有字符串
2.按照维度划分
一维数组
二维数组
三维数组
N维数组
...
数组的定义:
方式一:array() 语言结构
array([ [key => ]val, $...]);
$arr = array('name'=>'老杨', '18', '卡哇伊~~');
方式二:array()的替代语法[]; PHP版本需要5.4+
$arr = ['name'=>'老杨', '18', '好可爱'];
方式三:直接给数组下标赋值
$arr[键] = 值;
1.var_dump()打印变量的相关信息
但是,比较复杂的数组,无法显示完整;比如:get_defined_constants()
2.print_r(),配合pre可以完整的显示所有数据
1.未指定下标的值,会从0开始比较,找出当前数组中最大的数字下标加1,作为自己的下标
2.如果key是浮点数,会被舍去取整!如果是一个纯洁的数字字符串,也会被转换为相应的int值!
遍历:
一栋楼 ,3层,每层10间房,分别为101-110,201-210,301-310,每个房间里住着一个美女。有人要求你进入这栋楼去找一个叫‘刘亦菲’的美女,你将怎么找?
只能遍历索引数组,并且数组下标还必须是连续的
foreach ($数组 as $键 => $值) {
}
每次开始循环,会从数组的第一个元素开始,将值拿出来赋值给$v,将键拿出来赋值给$k;直到数组被遍历完毕,结束循环
3.联合使用list()、each()、while遍历数组
list():把数组中的值赋给一些变量
注意:list只能用于下标从0开始的索引数组
each():返回数组中当前的键/值对并将数组指针向前移动一步,超出数组长度返回false!
超全局变量:超全局变量是在全部作用域中始终可用的内置变量(语言参考->预定义变量)
$_GET 包含了通过URL的参数传过来的数据
$_POST 包含了通过POST方法传过来的数据(需要用表单发起POST请求)
$_REQUEST 默认包含了GET、POST和COOKIE的数据(COOKIE后面再讲)
1、get通过URL传输数据,随时可以查看和修改,安全性相对较低;而post不会显示在URL,相对安全
2、get传输的数据量大小会被URL的长度所限制(循环10万个1);而post传输的数据量是根据php.ini的配置文件(post_max_size),默认为8M!
(友情提示:要上传大文件还需要设置upload_max_filesize,默认为2M)
建议:登录、注册等涉及到密码或者文件上传等操作的时候用POST;做搜索或者传输一些简单数据的时候一般用get
默认为空,需要修改php.ini中的:
variables_order = "GPCS"
variables_order = "EGPCS" //加个E
四十.系统函数
数组相关的函数:
数组的键/值操作:
1.array_values($arr)
返回数组中所有的值并给其建立数字索引
2.array_keys($arr[, '值'[, true]])
返回数组中所有的键名
给'值'表示拿出该值的键
给'true'表示值用===判断
3.in_array('值', $arr[, true])
判断数组中是否有某个值
给true表示用===判断
4.array_key_exists('键', $arr)
判断数组中是否有某个键
5.array_flip($arr)
键值交换
6.array_reverse($arr[, true])
反转数组
给true表示保留原来的数字下标
统计与唯一性:
count($arr[, 1]) 统计数组元素的个数
给1表示递归统计数组个数(不常用)
array_count_values($arr) 统计数组中值出现的次数
注意:只能统计string或者int,否则报错
array_unique($arr) 去除数组中重复的元素,保留前面的值
使用回调函数过滤数组:
array_filter($arr, callback);
会将数组中的每个值都传给回调函数,在回调函数中返回true就保留该值,返回false就不保留
数组排序函数:
1.sort() 从小到大,不保留键 (升序)
2.rsort() 从大到小,不保留键(降序)
3.asort() 从小到大,保留键 (升序)
4.arsort() 从大到小,保留键(降序)
5.ksort() 按照键,从小到大(升序)
5.krsort() 按照键,从大到小(降序)
1.array_slice(切谁, 开始位置[, 切几个[, 是否保留键]])
切谁:要切的数组
开始位置:从0开始数,会保留开始位置的元素
[切几个]:没给的时候,默认切到最后
[是否保留键]:默认false,不保留;true保留原来的键
切谁:要切的数组,是引用传递
开始位置:从0开始数,会保留开始位置的元素
[切几个]:没给的时候,默认切到最后
[替代品]:将替代品插入到原来的数组中,不会保留键
用键数组的值作为键,值数组的值作为值;
要求两个数组的长度必须一致,否则报错并返回false
合并N个数组;
注意:同名的键,后面会覆盖前面的
返回N个数组中都有的值,下标保留前面
返回$arr1中有,其他数组里面没有的元素,下标保持不变
array_pop() 弹出数组中最后一个元素
array_shift() 弹出数组中第一个元素
array_push() 往数组最后追加1个或多个元素
array_unshift() 往数组最前面追加1个或多个元素
队列:相当于管子,先进先出(吃多了拉)
栈:相当于杯子,后进先出(吃多了吐)
随机打乱数组
range() 生成指定范围的数组
shuffle() 随机打乱数组
current() 返回数组当前指针的值
next() 将数组的指针移到下一个,并返回其值
prev() 将数组的指针移到上一个,并返回其值
end() 将数组的指针移到最后,并返回最后一个值
reset() 将数组的指针重置
四十二.系统函数 字符串相关
字符串常用输出:
echo 输出一个或多个字符串
print 输出一个字符串
echo和print是一种语言结构,不是一个函数;
用于输出字符串等简单的数据
就是查看各种类型变量的值
var_dump 打印变量的相关信息
可以看到任意类型的值和类型
printf() 格式化输出字符串
%s 表示字符串
%b 表示二进制数
%o 表示八进制数
%d 表示十进制数
%x 表示十六进制数
%c 表示是个ascii码值
%% 表示一个单纯的%
sprintf() 同上,只是将结果返回,而不是输出
1.echo是一种语言结构,不是函数,所以效率略高;
2.echo可以同时输出多个字符串,而print_r不可以
3.echo只能输出简单的数据类型,而print_r可以打印复合类型的数据,比如数组、对象等
ltrim($str[, '要去除的字符列表'])
默认去除左边的空格
rtrim($str[, '要去除的字符列表'])
默认去除右边的空格
trim($str[, '要去除的字符列表'])
默认去除两边的空格
str_pad($str, 长度,填充品)
用一个字符串将另一个字符串填充为指定长度
strtolower() 转换为小写
strtoupper() 转换为大写
ucfirst() 首字母大写
ucwords() 单词的首字母大写(空格区分单词)
htmlspecialchars()
将特殊字符转换为实体
htmlentities() 同上,基本不用
老版本里面会将中文一起转了
strip_tags()
去除html标签
nl2br
将\n换行转换为
换行
strrev()
将字符串颠倒显示
str_shuffle()
将字符串随机打乱
strlen()
统计字符串的长度,utf-8的中文占3个字节
md5()
将字符串进行加密,得到一个32位的加密后的字符串
number_format()
格式化一个数字
只能是1个、2个或者4个参数
strcmp()
比较两个字符串(区分大小写)
strncmp()
比较字符串开头的若干个字符(区分大小写)
strcasecmp()
比较两个字符串(不区分大小写)
strncasecmp()
比较字符串开头的若干个字符(不区分大小写)
explode('切割符', $str)
使用一个字符串分割另一个字符串,返回一个数组
implode('连接符', $arr)
将一维数组用指定字符串连接,返回一个字符串
join()
implode的别名
substr($str, 开始位置, 截多长);
开始位置从0开始数;为负数时表示倒着数!
可以像数组一样通过下标取出字符串的值
但是,最好不要用来取中文
提示:用法统一都是($str, '要找的子字符串');
1.strstr($str, '要找的字符串');
返回从子字符串第一次出现的位置开始,到结尾的字符串;
还有个别名:strchr
2.strrchr 返回从子字符串最后一次出现的位置开始,到结尾的字符串
3.strpos($str, '要找的字符串')
返回子字符串第一次出现的索引位置,从0开始;
注意:1个汉字占3个字节
4.strrpos($str, '要找的字符串')
返回子字符串最后一次出现的索引位置
5.stripos()不区分大小写的strpos
str_replace('找什么', '换成什么', '在哪儿换');
ceil() 向上取整
floor() 向下取整
round() 四舍五入
min() 最小
mt_rand() 随机数
四十六.分支
多向分支
if (表达式1) {
表达式1为true执行真区间,这个分支就执行完了,否则继续往后
} elseif (表达式2) {
表达式2为true执行这里,这个分支就执行完了,否则继续往后
} elseif (表达式3) {
表达式3为true执行这里,这个分支就执行完了,否则继续往后
} else {
表达式为false执行假区间
}
1. 所有的条件表达式最终都会被转换为布尔值,要么为true,要么为false
if ('123') { true }
2. 当if后面没有花括号{}包裹的时候,只会执行1条PHP语句(了解)
3. else if中间可以加上一个或多个空格隔开(了解)
4. 流程控制有一些替代写法(了解)
switch (表达式) {
case 值1:
语句体;
case 值2:
语句体;
...
default:
语句体;
}
switch会取出括号里的值,然后与语句体中的case所列出的值逐一比较(用==比较),如果结果为false,则将结果往下一个case传递;如果为true,则执行该case中的语句体;然后再碰到break语句即跳出switch条件判断,如果所有的值比对都不符合,则会执行default中的语句体
1、while循环
while (表达式) {
循环体;
}
do {
循环体
} while (表达式);
真,就再进行 do 语句体中的语句;
假,循环立马结束,不再执行循环体;继续运行后续代码
for (初始化语句; 条件判断语句; 每次循环后执行的语句) {
循环体;
}
初始化语句:在整个循环开始前,无条件的执行一次,并且只有一次;
条件判断语句:在每次循环前都会判断,为true执行循环体,为false就终止循环
每次循环后执行的语句:每单次循环后都会执行这个语句
break 跳出整个循环
continue 跳出本次循环,继续下一次循环
exit 或者 die 结束脚本执行;
die;
exit;
die();
exit();
die('结束时输出的字符串');
exit('结束时输出的字符串');
替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor; 以及 endswitch;。
do-while 只有一种语法,没有替代语法
函数(function)是一段完成指定任务的已命名代码块。函数可以遵照给它的一组值或参数完成特定的任务,并且可能返回一个值。(比如循环输出10行10列的表格,或者N行N列的表格)
1、自定义函数
(比如循环输出10行10列的表格,或者N行N列的表格)
2、系统函数
(比如var_dump()、time()等等)
1.自定义函数的格式
function 函数名([参数列表])
{
函数体;
}
2.函数名的命名规则
字母、数字、下划线,不能以数字开始;不能是关键字,不能与已存在的函数重名!
函数名不区分大小写
3.函数的调用
函数名([参数列表])
注意:函数的调用不分先后!!!!
//小提示:在PHP中,只要以$符开始,就是变量;只要加()就是调用函数
形参
函数定义时写的参数叫形参
形参可以有默认值,默认值必须是常量表达式,不能是诸如变量、或者函数调用等
有默认值的形参应该写在形参列表的右边,不然形同虚设
实参
调用函数时传的参数叫实参
实参的传递要与形参一一对应,个数最好是一样的,不能少(形参没有默认值的时候),也不要多
使用return语句可以让函数返回一个值
1、没有return语句的函数,默认返回null
2、return语句会立即终止函数的运行,函数中的后续代码不执行
function_exists检测函数是否存在
能够有效作用的区域
全局变量
1、在函数范围之外定义的变量叫全局变量(全局的按字面意思来说,到处都可以访问,比如函数内,C语或者Javascript言确实是的),但是,在PHP中,函数被看做一段独立的功能个体,它无法直接访问全局变量
2、在函数内想要访问全局变量
1.用关键字global将变量声明为全局的
2.通过超全局数组$GLOBALS['变量名']取下标的方式访问
这是一个特殊的变量,会在脚本运行时自动创建
局部变量
1、在函数内部定义的变量叫局部变量,该变量仅在当前函数的作用域内有效,函数调用完毕立即释放
2、在全局范围内访问局部变量
1.将局部的用global变为全局的(要在变量定义之前声明)
2.将变量当做返回值return出去
3、形参也是局部变量
用关键字static声明静态变量
特性:静态变量只会声明一次,不会重复声明
功能 参数 返回值
我们写函数的时候对这3个部分也要描述清楚,怎么描述呢,注释:
参数
1、常规参数,PHP八大类型
2、伪类型参数 (语言参考-》类型-》本文档中使用的伪类型与变量)
mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
如:var_dump()
print_r()
number 说明一个参数可以是 integer 或者 float。
如:pow() 求次方数
callable 表示该参数需要传一个函数,还有个别名callback
如:call_user_func()
session_set_save_handler()
void 作为返回类型意味着函数的返回值是无用的;作为参数列表意味着函数不接受任何参数。
如:unset() 不能有返回值
time() 不接受参数
$... 表示一个函数可以接受任意个参数
如:var_dump();
(要求:自定义一个函数,将任意个参数相加并返回结果)
func_get_args() //返回一个数组,包含所有参数
func_num_args() //返回参数总数
func_get_arg(int) //接收一个数字参数,返回指定参数,从0开始数
1.值传递(常用)
2.引用传递
通过引用传递的参数,函数可以修改其参数的值(语言参考-》引用的解释-》引用传递)
可变函数
如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它
被当做参数传递的函数,叫回调函数
专门用来调用回调函数的函数:
call_user_func('函数名'[, 参数1, 参数2...])
没有名字的函数;
通常作为回调函数传递
就是自己调用自己的函数
可以使用自定义函数库,并且可以更好的实现代码重用!
include
include '文件路径';
include('文件路径');
require
require '文件路径';
require('文件路径');
区别:如果包含的文件不存在,include报warning警告级别的错误,后续代码继续执行;require报一个fatal error致命错误,后续代码不执行
require_once
用法同上面的include 和require ,区别也同上
include和include_once的区别
include:包含一次就执行一次;
include_once:不管包含多少次,都只会执行一次,通常用于包含有函数、或者常量等不能重复定义的文件
1、什么是正则表达式?
正则表达式是一个从左到右匹配目标字符串的模式
2、作用
1.用于匹配(比如匹配邮箱、手机号)
2.用于替换(可以用新的东西把符合你条件的东西给替换了)
3.用于提取想要的内容
3、学习正则的流程
1.正则的语法
2.正则的函数
1、分隔符
在PHP中,正则表达式其实就是一个用分隔符包裹着的特殊的字符串,比如:
$pattern = '/\d/';
2、原子
原子是组成正则表达式的最小单位,每个正则表达式最少要包含一个原子!
1.普通字符做为原子
比如:0~9 a~z A~Z...等等
2.特殊字符做为原子
比如:$ . * ? ^...等等
一般标点符号和其他在正则中有意义的符号,想做为原子都需要加转义斜线\
提示:部分标点符号不用加\也可以,但是,加了也不会出错!比如逗号,
3.非打印字符(转义字符)
\r \n \t \\ ...等等
4.通用字符类型做为原子
\d 匹配0~9之间的数字
\D 匹配除了0~9之间的数字之外的
\w 匹配数字、字母、下划线
\W 匹配除了数字、字母、下划线
\s 匹配任意个空白符
\S 匹配除了空白符之外的
5.自定义原子列表
用[]自定义原子列表
比如:'/[abc]/'表示abc任何一个都可以
1.中横线-可以表示范围:1-9|a-z
2.^可以表示除了
1、字符串的边界
^ 表示匹配开始位置
$ 表示匹配结束位置
2、重复匹配:
这几个元字符表示量词,用于修饰前面一个原子的个数
? 表示0次或1次
+ 表示1次或多次
* 表示0次、1次或多次(任意次)
3、通配符:点号.
匹配除了换行符\n之外的任意一个字符
4、重复匹配之自定义量词
元字符{},用于自定义量词
{n} 表示前面的原子为n次
{n,} 表示前面的原子最少为n次,可以大于n次
{n,m} 表示前面的原子最少为n次,最多为m次
5、原子列表 []
元字符[],用于定义原子列表(详情请见:6.正则的原子.php)
6、模式选择符 | (或者叫表达式选择符)
从|隔开的正则表达式中任意选一个来用
7、模式单元 ()
元字符()可以将正则表达式变成一个单元,将表达式看成一个原子来使用
2、不想存储()中的值,可以用?:取消存储
对整个表达式进行修饰,如:'/abc/i'
i 表示忽略大小写
U 修改量词的贪婪模式
量词默认是贪婪的,表示的数尽可能的多
x 忽略正则表达式中的空格
s 全匹配符.将匹配任意字符,包括\n换行
m 将字符串视为多行
preg_match('正则', $str[, 匹配到的值[, 是否存储下标[, 从哪儿开始匹配]]])
匹配到的值:第0个,为匹配到的整体字符串;之后依次放()里面匹配到的值,默认为一维数组
是否存储下标:PREG_OFFSET_CAPTURE存储下标,会将$m变为二维数组
从哪儿开始匹配:默认为0,匹配整个字符串
返回值:返回匹配次数,0次或1次
匹配到的值:第0个,为匹配到的整体字符串;之后依次放()里面匹配到的值,默认为二维数组
是否存储下标:PREG_OFFSET_CAPTURE存储下标,会将$m变为二维数组
从哪儿开始匹配:默认为0,匹配整个字符串
返回值:返回匹配次数,0次或1次
执行一个正则表达式的搜索和替换
将正则匹配到的内容替换成指定内容;如果没匹配到,返回原字符串
preg_split(‘正则’,‘要切的字符窜’,)
用正则表达式切割字符串
错误的分类
语法错误
这种错误最常见,但也最容易搞定;一旦出现,一行代码都不执行
运行时错误
在页面上给你报出来,有的会终止代码执行,有的不会
逻辑错误
这种错误最麻烦
错误的级别
notice
提示级别,不会影响后续代码的执行
如:输出不存在的变量
warning
警告级别,也不会终止代码执行
如:include包含文件
error
错误级别,会终止代码执行
如:语法错误或者require
deprecated
反对级别,不赞成这样的使用,不会终止代码执行
如:(5.6用mysql_connect、echo mktime())
strict
语法不够严谨
1.用@屏蔽错误信息
有的错误屏蔽不了
2.通过配置文件php.ini控制错误的显示
phpinfo();能看到很多信息,找出php.ini的路径
display_errors
display_errors = off //不显示任何错误
注意:关闭错误显示后,如果页面中有error级别的错误,服务器会直接返回500错误
error_reporting
error_reporting = E_ALL //显示所有错误
问:如何设置只显示除了NOTICE之外的错误
答:方法一:error_reporting(E_ALL & ~E_NOTICE)
3.通过ini_set函数设置
ini_set('配置项', '配置值')
(不是所有的选项都可以用这个函数设置,具体哪些可以设置请参考手册:附录-》php.ini配置-》php.ini配置选项列表)
4.通过error_reporting函数设置错误级别
error_reporting(0); //屏蔽所有错误
可以通过set_error_handler函数自己接管错误处理。
注意:致命错误无法被自定义(手册中搜索set_error_handler)
1、以文件的方式记录(默认)
log_errors = On 开启错误日志的记录
error_log = C:/sb.txt 指定错误的路径
2、记录到操作系统日志中
error_log = syslog 指定错误的路径
我的电脑-》管理-》事件查看器-》windows日志-》应用程序
五十四.PHP的时间和日期
获取Unix时间戳
time() 获取当前时间戳
因为Unix操作系统的诞生,1970年为Unix元年
mktime() 获取一个指定日期的时间戳
mktime(时,分,秒,月,日,年)
没有给的参数默认为当前的!
strtotime()将英文的时间日期描述转换为时间戳
1、改php.ini配置文件:
date.timezone = "PRC" //默认为UTC
//PRC 中华人民共和国的简写
//People's Republic of China
date.timezone = "Asia/shanghai"//上海
中原(Asia/Shanghai) 上海
陇蜀(Asia/Chongqing) 重庆
长白(Asia/Harbin) 哈尔滨
新藏(Asia/Urumqi) 乌鲁木齐(慢两小时)
昆仑(Asia/Kashgar) 喀什(慢两小时)
参考:五大时区的划分:http://www.niubb.net/a/2015/11-15/961925.html
date.timezone = "Asia/hong_kong"//香港
2、通过ini_set函数来临时设置
ini_set('date.timezone', 'PRC');
3、通过专门的函数来设置或者获取
date_default_timezone_set('PRC');
date_default_timezone_get();
date(格式字串[, 时间戳])
格式字串中不能被识别的字符将原样显示
echo date('m'); //月份
echo date('d'); //日
echo date('H'); //时
echo date('i'); //分
echo date('s'); //秒
n 没有前导0的月份
j 没有前导0的日
G 没有前导0的小时
给了参数true返回一个浮点数
五十五.文件系统: (函数参考-》文件系统相关扩展-》Filesystem)
当程序运行时的数据是存放在内存中的,比如变量、常量等;想要长期保存程序运行完毕所产生的数据,我们可以利用文件的方式存储到硬盘上!
可以通过filetype()获取一个文件的类型
windows最常见的只有dir和file
is_dir(路径) //判断是否是目录
is_file(路径) //判断是否是文件
is_readable(路径) //是否可读
is_writable(路径) //是否可写
is_executable(路径) //是否可执行
检测文件或目录是否存在
file_exists(路径);
获取文件大小
filesize(文件路径); //单位为字节
获取相关时间
filectime(文件路径); //创建时间 create
filemtime(文件路径); //修改时间 modify
fileatime(文件路径); //访问时间 active
常见路径格式:
windows
C:/www/index.php
C:\www\index.php
Linux
/var/www/index.php
相对路径
./index.php
../1.jpg
路径相关的函数
basename()取出路径中的文件名部分
dirname()去除路径中的文件名部分
pathinfo()获取路径中的所有信息
realpath() 获取规范的绝对路径(文件必须存在,否则返回false)
opendir(目录路径) 打开一个目录
readdir(资源) 读取一个目录资源,并将指针往前移,返回文件或目录名
closedir(资源) 关闭一个目录
mkdir('目录'[, 权限, true]) 创建目录
在Windows中权限被忽略,Linux中0777表示最高权限
第3个true,表示递归创建目录
注意:创建的目录已存在会报错
文件路径:
相对路径:./a/b/c/1.txt
绝对路径:C:\wamp\www\php15\a\b\c\1.txt
注意:http的绝对路径无法删除
touch('文件名'); 设定文件的修改时间
如果文件不存在,则会被创建。
copy(原文件名,新文件名);
只能复制一个文件,不能复制目录
rename(旧名,新名 );
重命名一个文件,其实相当于剪切
打开文件+
fopen('文件路径', 打开方式);
打开方式:
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
w或w+/a或a+,如果不存在会自动创建
r或r+,不会自动创建文件
写文件
fwrite(资源, '写的内容');
写的位置由打开方式决定
读文件
fread(资源, 读的长度);
读的长度必须大于0
关闭文件
fclose(资源);
指针重置:
rewind($?) 将文件指针重置到文件开头,方便读取内容
简单的文件读写:(常用)
file_get_contents(文件路径)
读取文件内容,返回文件内容的字符串
file_put_contents(文件路径,写的内容[, FILE_APPEND])
文件不存在就创建;默认为覆盖内容,可以用第3个参数设置为追加
上传用到头像、相册、网盘、资料、种子、资源等
下载资料、种子、资源、图片等
就是将文件从客户端上传到服务端
实现步骤:
1、表单的设置
1.要做文件上传,method必须使用post
2.必须在form标签里面加:enctype="multipart/form-data"
enctype:用于指定在发送数据到服务器之前如何对表单数据进行编码
multipart/form-data:表示不对数据进行编码,以文件流(二进制)的形式上传到服务器。
application/x-www-form-urlencoded:默认选项,默认对所有字符进行编码
3.
1. file_uploads = On 是否允许文件上传
2. upload_max_filesize = 2M 上传文件最大允许范围
3. post_max_size = 8M POST表单上传数据的最大允许范围
4. upload_tmp_dir ="c:/wamp/tmp" 上传文件的临时目录
注意:
post_max_size的值一定要大于upload_max_filesize的值
1. 上传后的数据用$_FILES接收。
2. $_FILES中每个元素的意思
name 上传的文件名
type 文件类型
tmp_name 临时文件路径
文件上传的原理:就是在脚本执行完毕之前将文件从这个临时路径里面弄出来,因为这货会在脚本执行完毕后自动删除
error 错误号
其值为 0,没有错误发生,文件上传成功。
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
其值为 3,文件只有部分被上传。
其值为 4,没有文件被上传。
其值为 6,找不到临时文件夹。
其值为 7,文件写入失败。(比如你的临时目录没有写的权限)
size 文件大小,单位为字节
move_uploaded_file(临时文件名, 新文件名);
本函数检查文件是否是合法的上传文件
1、判断错误号
2、判断文件的mime类型
3、判断文件的大小
4、生成随机的文件名
5、获取文件的后缀名
6、判断并执行文件上传
is_uploaded_file()
将文件从服务器下载到客户端
注意:如果浏览器能够识别该文件的mime类型,会直接解析;如果不能识别,则提供下载
1.告诉它是一个附件
header('Content-disposition:attachment')
2.下载的文件没内容
在php输出的内容会被下载
用readfile()读取并输出
3.结合第1步,给文件取个名字
header('Content-disposition:attachment;filename=xxoo.jpg')
4.告诉它文件的大小
header('Content-length:'.filesize('文件路径'));
5.告诉它文件的类型
header('Content-type:image/jpeg');
数据库
数据库是计算机应用系统中的一种专门管理数据资源的系统。数据库就是一组经过计算机整理后的数据,存储在一个或者多个文件中,而管理这个数据库的软件就称为数据库管理系统。常见的软件开发中应用数据库有IBM的DB2,Oracle,SQL Server,PostgreSQL,MySQL,Access等。
DBS 数据库系统
DB 数据库
Database
DBMS 数据库管理系统
Database Management System
DBA 数据库管理员
Database Administrator
SQL是一种专门用于查询和修改数据库里的数据,以及对数据库进行管理和维护的标准化语言
数据操作语言(DML):用于操作数据库对象中所包含的数据。例如:INSERT,UPDATE,DELETE语句。
数据查询语言(DQL):用于查询数据库对象中所包含的数据,能够进行单表查询,连接查询,嵌套查询,以及集合查询等各种复杂程度不同的数据库查询,并将数据返回客户机中显示。例如:SELETE
数据控制语言(DCL):是用来管理数据库的语言,包括管理权限及数据更改。例如:GRANT,REVOKE,COMMIT,ROLLBACK等。
以行和列的形式存储数据,这一系列的行和列被称为表,一堆表组成了数据库,一堆库组成了咱们的数据库服务器
mysql -u用户名 -p密码 -h服务器地址
注意:
1.每个SQL命令都需要使用分号来完成
2.可以将一行命令拆成多行
3.可以通过\c、ctrl+c来取消本行命令
4.可以通过\q、exit或者quit来退出当前客户端
显示帮助信息:\h(同help命令)
将查询后的数据立起来:\G
取消当前未完成的操作:\c
退出当前客户端:\q
显示当前服务器状态:\s
更改执行符:\d
-- 查看所有的数据库
show databases;
-- 选择数据库
use 库名;
-- 创建数据库;库名已存在报错
create database 库名;
create database if not exists 库名;
create database 库名 default charset=utf8; --指定默认字符集
-- 删除数据库;库名不存在报错
drop database 库名;
drop database if exists 库名;
-- 查看所有数据表
show tables;
-- 创建数据表;
create table 表名(
字段1 类型,
字段2 类型,
字段2 类型
)engine=myisam default charset=utf8;
注意:字符集为utf8,少个-
-- 查看表结构
desc 表名;
drop table 表名;
-- 插入数据
insert into 表名 (字段1,字段2...) values(值1,值2...);
-- 查看数据
select `字段1`,`字段2` from 表名;
select * from 表名;
-- 修改数据
update 表名 set 字段1='值1',字段2='值2'... where 条件;
-- 删除数据
delete from 表名 where 条件;
1.字段名的反引号``可以省略,关键字除外;
2.所有的字符串值都需要加引号'';
3.所有修改和删除不加where条件都是耍流氓!
-- 在cmd下操作:
-- 导出指定数据库的结构和数据
mysqldump -uroot -p 库名 > 导出的路径
如:mysqldump -uroot -p gz24 > C:/gz24.sql;
-- 导出指定数据库里面某张数据表的结构和数据
mysqldump -uroot -p 库名 表名 > 导出路径
如:mysqldump -uroot -p -d gz24 > C:/gz24.sql;
-- 导入1:在cmd操作
mysql -uroot -p 库名 < 要导入的文件路径
-- 导入2:在进入mysql并use了数据库的情况
source 文件路径
-- 修改密码1:在cmd通过mysqladmin操作.密码太简单可能会有警告warning
mysqladmin -uroot -p password 123
set password for root@localhost=password('123');
update user set authentication_string=password('123') where user='root';
-- 刷新服务器
flush privileges;
grant 权限 on 库名.表名 to 用户名@主机名 identified by '密码';
-- 例子:
grant all privileges on *.* to hehe@localhost identified by '123';
grant select,insert,update,delete on *.* to hehe@localhost identified by '123';
1、定义数据表时,会指定数据的类型,整型、浮点型、字符串、日期、枚举、集合类型
根据你里面存什么东西来选择用什么类型。
tinyint
取值范围
有符号:-128 ~ 127
无符号:0 ~ 255 unsigned
占1个字节
可以用于存年龄、标记,比如商品的状态:1新添加,2表示在售中,3已下架;订单状态、性别
smallint 占2个字节
mediumint 占3个字节
int 占4个字节
取值范围
有符号:正负二十多个亿
无符号:0~40多个亿
用于计数、时间戳
bigint 占8个字节
1.存入小数会四舍五入
2.超出取值范围报错
非严格模式下,取最大值存入
3.int(5)表示的只是显示宽度,并不是限定只能插入5位数,它具体的取值范围,由类型所决定
定点数和浮点数都可以使用类型名后面加(M,D)方式来表示。(M,D)表示该类型一共显示出M位数字(整数位+小数位),D为小数点后面几位
float(浮点型)
double(双精度)
可以表示的范围更广,精度更高
decimal(定点数)
默认为(10,0)
比float更精确
1.当小数超出规定长度,采用四舍五入保存
2.超出整数范围,报错,无法插入
定点数如果不写精度和标度会按照decimal(10,0)来进行操作。如果超出了精度和标度,
也会进行四舍五入。定点数的存储使用二进制进行存储所以比较准确。
1、浮点数会存在误差。
2、对于精度比较敏感的数据应该用定点数来进行表示。
char和varchar很类似,都可以用来存储MySQL中较短的字符串,区别:+
1、char列的长度为固定长度,创建表的时候声明的最大长度,可以为0~255
2、varchar值可变长度,长度为0~65535之间的值。
3、char和varchar在超出指定的长度时都会被截取到指定的字符串(非严格模式下)。
5、blob和text在经过大量的删除操作之后有可能会引起性能问题。(删除以后在数据表中留下“空洞”)
可以使用 optimize table 表名 来回收这些空间。
mysql> create table tt3(
-> test enum('a','b')
-> );
Query OK, 0 rows affected (0.03 sec)
1、枚举方式的取值范围需要在创建表的时候显式的指定。
2、对于1~255个成员的枚举需要占用1个字节存储对于256~65535个成员使用2个字节存储。最多存储65535个成员。
3、如果超过了枚举里面指定的值,将会插入一个‘空’,枚举类型只能从集合中选取单个的值。而不能一次选去多个值。
4、enum的值不区分大小写
集合类型
mysql> create table t3(
-> col set('a','b','c','d')+
-> );
1、set类型可以在里面保存0~64个成员,根据成员的不同所占空间的大小也不同
1~8 1
9~16 2
17~24 3
25~32 4
33~64 8
mysql> insert into t3(col) values ('a,b,c');
1、重复的成员只保留一个。
2、超出范围的成员将会忽略。
3、插入值的时候应该都带引号。
int 4个字节 正负20多个亿或者0~40多个亿
tinyint 1个字节 正负127左右 或者 0~255
varchar(255) 不定长 length + 1
1、null、not null,插入值时没有在字段中插入一个值,默认为null。
指定not null必须在插入值时在该字段中插入一个值。如果不给插入一个值那么为”空“
1、zerofill表示0填充。一般和整型后面设定的宽度一起使用,如果数值长度小于指定的长度那么将会在前面补充相对应的0进行填充。
2、unsigned(无符号)如果要在字段里面保存非负数,或者较大上限的值时可使用该约束条件,将从0开始,需要在字段类型后面紧跟着定义unsigned
mysql> create table t9(
-> id int unsigned not null,
-> name char(32)
-> );
每行加1,插入一个null到一个auto_increment列时,MySQL将插入一个比出现过的最大值+1的值。一个表中只能有一个auto_increment列,并且必须定义为primary key或unique才能够使用
mysql> create table t1(
-> id int unsigned auto_increment primary key,
-> name char(32)
-> );
索引是数据库中用来提高搜索性能的。我们通常在做数据库优化的时候通常先做索引的优化,数据量少的时候没效果,数据越多效果越明显。索引加上之后是自动创建的,不是我们刻意去使用的。
1、常规索引(index),最基本的索引,没有任何限制
创建索引:
create table 表名(
字段.....,
index 索引名 (要索引的字段)
);
-> id int unsigned,
-> name char(32)
-> ,index id(id)
-> );
create index 索引名 on 表名(要加索引的字段);
mysql> create index id on t3(id);
drop index 索引名 on 表名
create table 表名(
字段....,
unique 索引名(要索引的字段)
);
-> id int unsigned,
-> name char(32),
-> unique id(id)
-> );
create unique index 索引名 on 表名(要索引的字段)
mysql> create unique index id on t5(id);
drop index 索引名 on 表名
3、主键索引(primary key),和唯一索引类似,也是唯一的,一个表只能有一个主键
创建索引:
create table 表名(
id int unsigned auto_increment primary key,
name char(32)
);
alter table 表名 drop primary key
mysql> alter table t7 drop primary key;
-- 存储引擎
mysql中常用的存储引擎就两种:myisam和innodb
基本的差别:
1.myisam不支持事物处理、外键等高级特性,而innodb支持
2.myisam强调的是性能,其执行速度比innodb略快
3.myisam是表锁,innodb是行锁
mysql的字符集分为4个级别:
服务器级别
库级别
表级别
字段级别
1.查看数据库的字符集
show create database 库名;
2.建库的时候指定字符集
create database 库名字 default charset=utf8;
3.修改库的字符集
alter database 库名字 default charset=utf8;
1.查看表的字符集
show create table 表名字;
2.建表的时候指定字符集
参考之前的
3.修改表的字符集
alter table 表名字 default charset=utf8;
-- 表的修改
1.修改表的名字
alter table 旧表名 rename 新表名
-- 2.改字段的类型
alter table s1 modify name char(30) not null;
-- 3.改字段名
alter table s1 change username name varchar(30) default 'no';
-- 4.添加新字段
alter table s1 add sex enum('m', 'w', 'y') not null default 'm';
alter table s1 add des varchar(255) first;
alter table s1 add des2 varchar(255) after id;
-- 5.删除字段
alter table s1 drop des2;
-- *6.修改表的存储引擎
alter table 表名字 engine=myisam;
-- *7.修改表的字符集
alter table 表名字 charset=utf8;
alter table 表名字 default charset=utf8;
-- 数据操作语言(DML)
1.insert 增
1.可以插入单条语句
insert into 表名 value();
2.插入多条语句
insert into 表名 values(),()...;
3.指定字段
insert into 表名(字段1,字段2...) values(),();
注意:没有指定字段的情况下,必须将所有的字段都一一赋值
2.update 改
update 表名 set 字段1=值1,字段2=值2... where 条件;
3.delete 删
delete from 表名 where 条件;
select语句
1.查询所有
select * from 表名;
2.查询指定字段
select 字段1,字段2... from 表名;
3.给字段指定别名
select 字段1 as 别名,字段2 from 表名;
-- as可以省略
select 字段1 别名,字段2 from 表名;
5.在select中使用表达式
运算符:+ - * / %
函数:
md5() md5加密
password() mysql的加密
unix_timestamp() Unix时间戳(和php中time()返回的一样)
concat() 将两个字段连接查询
6.where条件
and 和 or
is null 和 is not null
between 和 not between
select * from exam_type where id between 3 and 10;
like 和 not like
_ 表示任意的单个字符
% 表示任意个字符
select * from exam_user where username not like '%强';
in 和 not in
select * from exam_user where id not in(1,2,2,3,4,3,432,423,4,234,32);
order by 字段[ asc];(默认升序)
order by 字段 desc;(倒序)
限定条数
limit 5; 只查5条
limit 5,5;跳过5条,取5条
分页公式: (当前页-1) * 每页显示条数
五十九.误删除root用户或者忘记mysql密码
//扩充,这一步还有另一个方法:
停止mysql服务后,在cmd用mysqld命令开启安全服务,之后也可以直接进行下面的步骤:
mysqld --skip-grant-tables
关键是操作完毕后要记得关闭安全服务,不然mysql服务无法启动:
mysqladmin shutdown
insert into user(user,ssl_cipher,x509_issuer,x509_subject) values('roots','','','');
添加完成后,对该root用户更新权限,更新权限命令如下:
update user set Host='localhost',select_priv='y', insert_priv='y',update_priv='y', Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';
flush privileges;
exit;
面向对象的三大特征
封装、继承、多态
对象
万事万物皆对象
客观存在的任何一个实体
类
对相同或相似对象的一种抽象描述
类与对象
通常先有类,通过类实例化出对象;大多数情况下使用的是对象
class 类名
{
[成员属性] —— 相当于变量
可以有默认值
不能是变量
可以是常量
可以有运算 5.6+
值可以是任意类型
和以往的函数一致
可以直接访问自己的成员属性($this)
}
new
$对象名 = new 类名;
$对象名 = new 类名();
都会触发构造方法
$对象名->属性名; //加了$,含义不一样
$对象名->方法名();
类型是一个对象,表示的是自己
不能在类外使用
构造方法
__construct()
在使用new关键字得到新对象的时候
析构方法
__destruct()
在销毁对象的时候。脚本执行完毕,会自动销毁对象
=
取别名,不会产生新对象
==
判断是否是同一个类的实例,并且属性和值是否相同
===
判断两个对象是否是同一个对象
三个关键字
public、protected、private
三个范围
自己、家族、外部
3P表
自己 家族 外部
public Y Y Y
protected Y Y N
private Y N N
__construct构造方法(可能会看到和类名同名的方法)
触发时机:使用new关键字得到新对象的时候
参数:可有可无
__destruct析构方法
触发时机:销毁对象的时候
参数:不能有
触发时机:在给一个没有权限访问或者不存在的属性赋值的时候
参数:2个(要赋值的属性名,值)
__get
触发时机:在获取一个没有权限访问或者不存在的属性的时候
参数:1个(要获取的属性名)
触发时机:在使用isset函数检测一个没有权限访问或不存在的属性的时候
参数:1个(要检测的属性名)
__unset
触发时机:在使用unset函数删除一个没有权限访问或不存在的属性的时候
参数:1个(要删除的属性名)
调用没有权限访问或者不存在方法的时候
__callStatic
调用没有权限访问或者不存在静态方法的时候
将对象当做字符串输出的时候
__invoke
将对象当做函数调用的时候
使用serialize串行化对象的时候
__wakeup
使用unserialize反串行化的时候
使用clone关键字克隆对象的时候
在使用不存在的类的时候
唯一一个写在类外的方法
用于继承
父类
被其他类继承的类,也叫基类
子类
继承其他类的类,也叫派生类
PHP只支持单继承 只能有一个爹
PHP可以被多个继承 一个爹可以有多个儿子
PHP支持多层继承 可以有祖孙关系
属性的继承
子类会覆盖父类的同名属性,私有除外
权限只能扩大,不能缩小
父类 子类
public public
protected public protected
private public protected private
访问的一定是覆盖后的结果,私有的无法覆盖
方法的继承
子类会覆盖父类的同名方法,私有除外
权限只能扩大,不能缩小
父类 子类
public public
protected public protected
private public protected private
访问的一定是覆盖后的结果,私有的无法覆盖
可以通过parent关键字调用父类的方法
要求:重写构造方法的时候,务必先调用一次父类的构造方法,保证基类正常运行
parent::__construct();
父类名::__construct();
final
可以修饰类和方法
被修饰的类不能被继承,方法不能被重写
static
可以修饰方法和属性,不能修饰类
静态方法里面不能出现$this
静态方法里面只能访问静态的成员属性
self::$属性名
类名::$属性名
const
在类里面定义常量
self::常量名
类名::常量名
instanceof(运算符)
检测该对象是否是该类的实例
包含抽象方法的类就是抽象类
必须用abstract来修饰
必须继承并且子类要实现所有的抽象方法
可以有自己的普通方法
没有方法体的方法
必须用abstract来修饰
必须以分号结尾
不能是private和static
定义格式
interface 接口名{
[常量]
[抽象方法]
}
接口里面所有都是抽象方法,不需要用abstract修饰
接口与类之间是实现(implements)关系,可以多实现(用逗号隔开)
接口与接口之间是继承关系
类在继承其他类的同时还可以实现接口(多实现)
如果只是单纯的定义规范,两种都可以
如果定义规范的同时还要共享一些方法,就必须是抽象类
1. class_alias('旧类名', '新类名');
给类名取个别名
检测对象或者类(不受封装限制)中的方法是否存在
3. property_exists(对象或者类名, '属性名')
检测对象或者类中的属性是否存在,父类的私有属性无法检测
4. class_exists('类名')
检测类是否存在
获取对象中有权限访问的成员属性,返回一个数组
6.get_class_methods(类名或者对象)
获取类或者对象中有权限访问的方法,返回一个数组
获取父类类名
$e = new Exception('胖子固有一死,或重于泰山,或重于其他山');
try {
echo 123;
throw $e;
echo 321; //无法执行到
} catch (Exception $e) {
echo $e->getMessage();
}