黑马程序员php
常用方法
输出方法
- echo
- print_r
- var_dump();
1
2
3
4echo print("hello world!"); //hello world 1(返回值)
print "hello world!"; //hello world
$a = 1;
print_r($a); //1
时间输出
- date();//格林威治时间
- time();//当前时间
- microtime();//微秒
- strtotime();//字符串转换成时间戳
1
2
3
4echo date('Y 年 m 月 d 日 H:i:s',12345678); //1970 年 05月 24 日 05:21:18
echo time(); //时间戳
echo microtime(); //微秒,时间戳
echo strtotime('tomorrow 10 hours'); //时间戳
数学方法
1 |
|
有关函数的方法
- 函数是否存在 function_exists();
- 获取指定的参数 func_get_arg();
- 获取全部的参数 func_get_args();
- 获取参数的长度 func_num_args();
1
2
3
4
5
6function demo($a,$b){
var_dump(func_get_arg());
var_dump(func_get_args());
var_dump(func_num_args());
}
function_exists() && demo(1,2,3,4);
include&require
- include //引用多次执行多次 warning
- include_once //引用多次执行一次
- require //报错形式不同 fatal error
include嵌套关系会基于调用页面为基准页 进行相对位置获取
静态变量
1 |
|
静态变量会随着调用次数的增加而增加
- 用于计数
- 用于递归调用
可变函数
1 |
|
匿名函数和闭包
匿名函数
1 |
|
函数执行后没有被释放 因为引用还存在
闭包
1 |
|
函数执行完成后匿名函数没有被释放(视频中的解释并不能说明未释放!)
理解了 是可以说明的 手写一次就明白了!
伪类型
基本数据类型:
- 整型 int/integer 整数 4字节
- 浮点型 float 小数 8字节
- 字符串 string 字符串 自动大小
- boolean 布尔型
复合数据类型:
- 对象 object 存储对象
- 数组型 array 存放多个数组元素
特殊数据类型:
- 资源型 resource 存放资源数据(php外部数据,如数据库,文件等)
- NULL 不能参与运算等操作 可以重新赋值
伪类型主要有两种:
- Mixed 混合的 多种数据类型
- Number 整形和浮点型 的替代
错误处理
- E_PARSE 编译错误
- E_ERROR fatal error 致命错误
- E_WARNING warning 警告错误 不会影响代码 但会出现未知问题
- E_NOTICE notice 通知错误 不会影响代码
用户错误:
- E_USER_ERROR
- E_USER_WARNING
- E_USER_NOTICE
- E_ALL
错误调用:
- trigger_error();//手动报错
1
2
3
4
5
6
7
8header("Content-type:text/html;charset=utf8");
$a = 0;
$b = 10;
if($a == 0){
trigger_error("被除数不能为0!"); //可以继续执行
trigger_error("被除数不能为0!",E_USER_ERROR);//不能继续执行
}
echo "hello world!";
开启日志log
配置文件php.ini
1 |
|
用户自定义错误处理函数
set_error_handler();
1 |
|
字符串定义
定义方式
- 单引号
- 双引号
- nowdoc 没有单引号的单引号字符串
- heredoc 没有双引号的双引号字符串
1 |
|
上边界后不能接任何字符,包括空格
下边界前不能有任何字符,后面只能接;
中间全部都是字符串内容,包括注释
区别
转义符:
- '
- "
- \r 回车
- \n 新行
- \t tab
- $ 变量符号
1 |
|
字符串长度
1 |
|
字符串相关函数
转换函数
- implode(连接方式,数组); 将字符串按照某种格式拼接
- explode(分割字符,目标字符串);将字符串按照某种格式分割
- str_split(字符串,字符串长度);按照指定长度进行分割字符串
截取函数
- trim(字符串,指定字符); 去除两边的空格,也可以去去除指定字符
- ltrim();//左边
- rtrim();//右边
截取函数
- substr(字符串,指定开始位置,截取长度);//从0开始
- strstr(字符串,匹配字符,截取到最后);
大小写转换
- strtolower($str);
- strtoupper($str);
- ucfirst($str);//首字母大写
查找函数
- strpos($str,”a”);//字符第一次出现的位置
- strrpos($str,”a”);//字符最后一次出现的位置
替换函数
- str_replace(被替换的内容,替换的内容,操作的字符串);
格式化输出数据
- printf();//估计用不上 很简单
- sprintf();
其他方法
- str_repeat();//重复某个字符串n次
- str_shuffle();//随机打乱字符串
数组
一维数组
定义的方法
1 |
|
多维数组
1 |
|
异形数组
混合数组,与js一样
数组遍历
一维数组访问下标
1 |
|
二维数组访问下标
1 |
|
foreach遍历
1 |
|
for循环
- 获取数组长度 count($arr)
- 数组元素下标是规律的数组
1 |
|
while 配合each和list遍历数组
- each 能够从一个数组中获取当前数组元素的下标和值,并以四个元素的数组返回元素下标和值.
- 0下标 => 取得元素的下标值
- 1下标 => 取得元素的值
- key => 取得元素的下标值
- value => 取得元素的值
1 |
|
- list 是一种结构,不是函数 没有返回值,list提供一堆变量去获取数组的元素值,然后一次存放到对应的变量中,list必须从索引数组中获取数据,而且必须从0开始
1 |
|
搭配实现while
1 |
|
数组相关函数
排序函数 都是按照ascii进行比较 会改变原数组
- sort();顺向
- rsort();逆向
- asort();顺向 保留下标
- ksort();按照下标顺向排序
- krsort();逆向排序
- shuffe();随机排序
1 |
|
指针函数
- reset()重置
- end();重置到最后
- next();下一个 到边界后不能返回
- prev();上一个 到边界后不能返回
- current();获取当前指针对应的元素 指针不移动
- key();获取当前指针对应的下标 指针不移动
1 |
|
其他函数
- count(); 总数
- array_push(); 后面加一个
- array_pop(); 后面取出一个
- array_shift();前面取出一个
- array_unshift();前面加一个
- array_reverse();翻转
- in_array(5,$arr); 查询元素
- array_keys(); 获取key
- array_values();获取value
1 |
|
编程思想
算法
递推算法
- 顺推 通过条件推结果
- 逆推 通过结果推过程
1 |
|
递归算法
- 简化问题 找到最优子问题(不能再小)
- 函数自调用
1 |
|
冒泡排序
相邻比较从开始比较到最后次数和第二次循环次数相同,从最大取到最小
1 |
|
选择排序
1 |
|
插入排序
1 |
|
快速排序 (递归)
会消耗大量资源
1 |
|
并归排序
1 |
|
查找算法
1 |
|
表单
表单提交
1 |
|
文件上传php处理方式
1 |
|
多文件上传
1 |
|
1 |
|
Curl
代码版的浏览器,允许我们在代码中像使用浏览器一样访问别人的网页
配置文件中开启curl
1 |
|
11
1 |
|
函数封装
文件上传功能说明
1 |
|
1 |
|
php连接数据库
资源 = mysql_connect(服务器地址,用户名,密码);
设置连接编码
mysql_query("set names utf8",$link);
mysql_set_charset("utf8");
1 |
|
$link是超全局的
选择数据库
1 |
|
关闭连接
1 |
|
增删改操作
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
数据查询
- mysql_num_rows();
1 |
|
解析结果集
- mysql_fetch_assoc();获取关联数组,表的表单名字作为数组下标,元素值为数组元素值
- mysql_fetch_row(); 获取索引数组,数组下标从0开始
- mysql_fetch_array();获取关联或者索引数组,但是默认是同事存在:一个记录取两次,形成一组是关联数组,一组是索引数组;可以通过第二个参数来决定获取的方式
- MYSQL_ASSOC 只获取关联
- MYSQL_NUM 只获取索引
- MYSQL_BOTH 两种都获取
1 |
|
相关函数
1 |
|
错误判定
1 |
|
其他函数
1 |
|
绘画
创建画布
1 |
|
通过图片创建画布
1 |
|
验证码实现
1 |
|
验证码封装
1 |
|
绘画
创建画布
1 |
|
cookie&session
cookie的基本使用
setcookie(名字,值);
1 |
|
php获取浏览器的cookie
1 |
|
cookie生命周期
cookie在浏览器生存时间(下次访问服务器时候是否携带对应的cookie)
- 默认(不设定) 不设定周期默认是关闭浏览器就清空
- 设定日期戳 通过setcookie第三个参数可以限定生命周期,是用时间戳来管理的,格林威治时间
- 设置为0 表示与默认设置相同
- 删除一个cookie 可以通过设定生命周期来实现
1 |
|
cookie作用范围
不同的文件夹层级中,设定cookie默认是在不同的文件夹下有访问限制.上层cookie下层可以访问,下层cookie上层不能访问.
- 默认范围
- 设定为 ‘/‘ 告知浏览器当前cookie得作用范围是网站根目录
1 |
|
cookie跨子域
同一一级域名下的不同二级域名a.uuguo.cn b.uuguo.cn 可以通过cookie共享访问.默认不允许
- 设定cookie得有效域名 不同域名(主机)之间不能共享cookie
- 不设定时的默认有效域名
- 跨子域得设定方法 在设定域名访问的时候用设定上级域名即可
1 |
|
cookie数组数据
1 |
|
session
session只与cookie有关,与浏览器无关
- php碰到sission_start()时开启session会话,会自动检测sessionID
- 如果有则使用
- 如果没有则创建一个sessionID,并通过响应头以cookie形式保存到浏览器中
- 初始化超全局变量$_SESSION为一个空数组
- php通过sessionID去指定位置(session文件存储位置)匹配对应的文件
- 不存在该文件 创建一个sessionID命名文件
- 存在 读取文件内容(反序列化),将数据存储到$_SESSION中
- 脚本执行结束 将$_SESSION中保存的所有数据序列化存储到sessionID对应的文件中.
session创建及访问
1 |
|
session配置
基础配置
- session.name: session名字,保存到cookie中sessionID对应的名字
- session.auto.start 是否自动开启session(无需手动session_start()),默认是关闭的
- session.save_handler session数据的保存方式,默认是文件形式
- session.save_path session文件默认存储的位置(不设置为使用系统临时文件,因为有的系统不开发系统临时文件权限,会导致失效,需要手动设置)
常用配置
- session.cookie_lifetime phpsessionID在浏览器端对应cookie的生命周期,默认是会话结束
- session.cookie_path sessionID在浏览器存储之后允许服务器访问的路径(cookie有作用范围)
- session.cookie_domain cookie允许访问的子域(cookie可以跨子域) 默认为空,只能访问当前子域
session配置的两种方式
- php.ini 全局配置,修改php.ini中的配置项
- 脚本配置 php可以通过ini_set函数来在运行中设定某些配置项(只会对当前运行的脚本有效),把这种配置称之为项目级
@Ini_set('session.save_path','E:/server/sessions');
session销毁(删除)
session删除是指删除session数据,$_SESSION中看不到而已;销毁session是指删除session对应的session文件.
session_destory(),会自动根据session_start()得到sessionID去找到指定的session文件,并把其删除.
1 |
|
session垃圾回收机制(php.ini参数设置)
- session.gc_maxlifetime = 1400 规定session文件最大的生命周期为1440秒,24分钟
- session.gc_probability = 1 垃圾回收概率因子(分子)
- session.gc_divisor = 1000 垃圾回收概率分母
缩略图
1 |
|
面相对象
1 |
|
访问对象的属性和方法
1 |
|
1 |
|
类常量
1 |
|
self 关键字
- $this代表当前对象,self代表当前类
- $this用来调用对象中的东西(成员属性成员方法);
- self用来调用类的东西(类常量,静态属性,静态方法);
- $this使用箭头(->)
- self使用(::)
- $this只能在成员方法中使用,self可以用在成员方法,静态方法中.
构造方法
- 自动调用
- 名称固定 __construct()
- 可以有参数也可以没参数
- new后括号直接传参数
- 作用:对象初始化.给私有属性赋值,数据库对象初始化(连通,选择数据库)
- 构造方法只有一个
- 可有可无
- 一定是成员方法
- 没有返回值,不要使用return语句
1 |
|
析构方法
- 销毁一个对象前,自动调用
- 名称是固定的 __destruct()
- 一定没有参数,一定是成员中方法
- 作用 垃圾回收 例如:断开数据库连接,在线人数
- 网页执行完毕,自动销毁
- 手动销毁
1 |
|
三大特性
- 封装
- 继承
- 多态
封装
1 |
|
封装数据库连接类
1
1 |
|
2
1 |
|
继承
1 |
|
接口
- 接口也是子类中方法的命名规范
- 接口就是特殊的抽象类
- interface 关键字,用来声明一个接口,接口是一种特殊类
- implements关键字,创建一个子类,来实现接口
- 同类的东西,使用extends来继承;不同类,使用implements来继承
- 接口中只能存在两种东西:类常量,抽象方法
- 接口中方法默认都是抽象方法,因此不需要加abstract
- 接口中方法的权限,必须是public;
- 接口中方法,可以是成员方法,也可以是静态方法
- 接口中所有的抽象方法,在子类中必须要重写
- 接口中常量不能重写,只能继承
- php中的重写,不一定是方法重写,还可以是常量重写,静态属性重写,静态方法重写
封装
1 |
|
demo
1 |
|
类的自动加载
- __autoload() 系统函数 名称是固定的
- 需要定义函数的内容
- 唯一参数,类名参数
- 当使用一个不存在的类时,__autoload()会自动调用
- 当使用new关键字创建一个对象时 new student()
- 当使用静态化方式调用 Student::getCode()
- 当继承一个不存在的父类 class ItcastStudent extends Student{}
- 当实现一个不存在的接口类时 class Student implements Inter{}
函数的内容包含两方面:
- 构建类文件真实路径
- 判断并包含类文件代码
1 |
|
自定义类文件加载函数
- spl_autoload_register(func)
1 |
|
1 |
|
魔术方法
__toString()
将对象转成字符串时,魔术方法__toString会自动调用
1 |
|
__invoke()
当把对象当成函数调用时,魔术方法__invoke()会执行
1 |
|
__clone()
1 |
|
对象设计模式
111
- 面相对象代码设计经验的总结
- 可以实现代码重用,节省时间,利于后期维护
1
常用的设计模式
- 单例模式: 一个类只能创建一个对象,不论什么办法,都不能创建第二个对象
- 工厂模式:根据传递的不同类名,来创建不同类的对象的工厂
单例设计的要求(三私一公)
- 一私:私有的静态的保存对象的属性;
- 二私:私有的构造方法,阻止类外new对象;
- 三私:私有的克隆方法,阻止类外clone方法
- 一公:公共的静态的创建对象的方法
1 |
|
instanceof
判断一个对象是否是某个类的对象
1 |
|
对象设计模式
111
- 面相对象代码设计经验的总结
- 可以实现代码重用,节省时间,利于后期维护
常用的设计模式
- 单例模式: 一个类只能创建一个对象,不论什么办法,都不能创建第二个对象
- 工厂模式:根据传递的不同类名,来创建不同类的对象的工厂
单例设计的要求(三私一公)
- 一私:私有的静态的保存对象的属性;
- 二私:私有的构造方法,阻止类外new对象;
- 三私:私有的克隆方法,阻止类外clone方法
- 一公:公共的静态的创建对象的方法
1 |
|
instanceof
判断一个对象是否是某个类的对象
1 |
|
单例模式操作数据库完整代码
1 |
|