php知识总结

一、php基本语法格式

1.1.简介

php文件:


image.png

php能做什么:


image.png

运行环境:
image.png

原理:
客户端浏览器不能读取php文件


image.png
1.2.基本语法,标记、注释等

php文件说明:


image.png

php标记:


image.png

php注释:
image.png

二、php数据类型

2.1.php数据类型简介
image.png

示例:


image.png

永久性类型转换:


image.png
2.2.php布尔类型数据
image.png

布尔类型,数据转换


image.png
2.3.整型integer

十进制、八进制、十六进制


image.png

布尔转整型:只有0和1
字符串转整型:必须数字类型开头的字符串才能转换,其他转换成0
示例:


image.png

结果:
image.png
2.4.浮点型Float

其他类型如何转换浮点数


image.png

浮点类型如何比较
不能直接比较,需要借助一个极小值(精度)。
用两个浮点数的差和极小值作比较
示例:


image.png

结果是:不相等
2.5.字符串String

四种方式:


image.png

双引号解析变量,单引号不解析变量
heredoc 和双引号功能一样,不需要转义,解析变量
nowdoc 和单引号功能一样,不需要转义,不解析变量


image.png

image.png
2.6.数组

语法:


image.png

数组分类:


image.png

数组值得类型:
image.png

数组访问方式:


image.png

数组元素的添加与更新:
image.png

数组元素的删除
image.png

数组元素重建索引
image.png

遍历数组 foreach(专门用来遍历数组):
image.png

php常用输出语句:


image.png
2.7.对象类型Object的创建与访问

创建对象
类:是创建对象的模板
访问对象中的属性和方法
示例:


image.png

其他类型如何转为对象

2.8.stdClass标准类的使用,与类型转换

stdClass标准类的使用
创建对象,添加属性,访问属性


image.png

其他类型如何转为对象
数组转对象、
字符串转对象、


image.png

三、php变量与常量

3.1变量赋值:值传递与引用传递

给变量赋值,两种方式
值传递:两个变量相互独立,位置不同
引用传递:两个变量指向同一个地址


image.png
3.2可变变量

可变变量:变量名称可以来自另一个变量的值


image.png
3.3变量作用域

有四种变量域


image.png

静态变量,可多次调用,每次调用结束保存值,等待下次调用

3.3预定义变量

$GLOBALS:是全局变量数组,里边保存当前脚本中的全局变量
$_SERVER:当前服务器与运行环境信息
$_GET:获取URL地址中的变量
$_POST:用于接收表单等通过POST方式发送的数据

get请求示例:通过url地址传递,适合公开信息


image.png

$_POST请求示例:在head中传递,通常MD5加密


image.png
3.3 cookie与$_SESSION

cookie:写到客户端浏览器中的变量,供浏览器调用
1.为什么用cookie:
http协议是无连接,用户每打开一个页面都认为是全新访问,哪怕是同一个用户。现代网络,服务器需要对用户身份和状态进行识别。
cookie可以让服务器知道我是谁,并且实现数据在多个页面的共享。
2.cookie由谁来创建:
用户打开一个网站,浏览器会自动为当前域名在本地创建一个cookie,通常叫uid(用户id),是一个不会重复的字符串,用来识别访问者。
随后,cookie与客户端无关了,全部由服务器上的应用程序来控制。如通过php,创建、查看、消除cookie。

创建cookie、查询cookie:
需要运行两次,
第一次setcookie()方法在客户端创建cookie,
第二次查询客户端上的cookie,并显示。


image.png

用户登录并设置cookie示例:
login.php


image.png

页面显示如下:


image.png

用户提交,正确后跳转到index.php


image.png

效果:


image.png

登陆后打开cookie显示如下:
image.png
3.3$_SESSION

预定义变量:session
session和cookie功能类似,都是来存储访问者信息的。
cookie是将访问者信息保存在浏览器上,session是将访问者信息保存在服务器中。
示例:
第一次运行程序,创建session。可以看到客户端cookie里,生成了session_id文件。同时服务器端也会生成一个session文件,以value值为文件名。
第二次运行,显示session文件的value。


image.png

服务器端的session文件:


image.png

给服务器端的session文件添加内容:


image.png

删除session文件中的内容:
逐个删除文件内容:
删除session文件:


image.png

四、php程序运行流程控制

4.1条件判断:if语句双分支流程

示例:


image.png
4.2多分支结构:switch语句

语法:
条件表达式类型,只能是整数或字符串,不能是布尔值


image.png

示例:


image.png
4.3for循环:万能循环

语法:


image.png

示例:


image.png
4.3while循环
image.png
4.4do-while循环
image.png

五、运算符与表达式

5.1运算符

运算符分类:
三元只有一个


image.png

运算符分类:


image.png

等于、全等、不等于、全不等于
等于:== 只判断值是否相等,不判断类型,‘30’==30,为真
全等于:=== 值和类型全部相等,才为真

不等于:<> 只判断值是否不相等,不判断类型
全不等于:!== 值和类型有一个不等,则为真

5.2表达式
image.png

六、函数及应用

6.1 创建与调用函数

函数的功能通过参数体现
函数必须要有一个返回值,是给用户的反馈
语法:


image.png
6.2 函数四种参数类型

image.png

值参数(变量名):引用参数将全局变量的地址引用给形参,函数中内部对形参的改变,会映射到全局变量,是内存共同体
默认参数:适合于实参数量小于形参,多出来的必须设置为默认值,且放在参数列表右边
可变参数:函数可以接受任意数量的参数,适用于实际参数大于形式参数
func_get_args();用在函数体内,将函数当前的参数打包到一个数组内返回

6.3 可变函数与回调实现

可变函数(变量函数):函数名称来自另一个变量


image.png

方法二:


image.png

回调函数:
就是在处理一个功能的时候,让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数配合、协助进行处理

接上图代码


image.png
image.png
6.4 函数导入与文件包含:include和require的使用

在PHP中, 有require、require_once、include、include- once四种方法包含(引用)一个文件


image.png
6.5 匿名函数与闭包实现

匿名函数:没名称或者名称可以动态设置
闭包:就是在一个函数中,引入了一个匿名函数,就构成了一个闭包
示例:


image.png
6.6 函数创建与调用

1.用function关键字创建,按照名称调用
2.用create_function()函数来创建函数
3.用function来创建一个匿名函数
4.用function创建一个自执行函数

示例:


image.png

接上图:


image.png

七、函数组及使用技巧

7.1.数组的定义与分类
image.png
7.2.数组的创建于访问:3创建方法2访问方式
image.png

示例:


image.png
7.3.数组的遍历
image.png

1.for循环来遍历:索引、关联数组
索引数组:


image.png

关联数组:指针访问


image.png

2.while循环遍历:索引、关联数组
索引数组:


image.png

关联数组:


image.png

3.foreach循环来遍历:索引、关联数组
索引数组:
image.png

关联数组:


image.png

总结:
默认索引数组用for循环遍历;
关联索引数组用foreach遍历;
7.4. list结构:将默认索引数组元素转变量

list语句的主要功能:将数组转为变量
1.数组的键名必须是默认从0开始递增的索引数组,不能是关联数组。
2.list的参数,不一定要和数组元素一一对应,不对应的变量自动忽略


image.png
7.5.用each()函数拆分数组元素并遍历

each()可以遍历任何数组,将当前数组指针所处位置元素以特殊键值对方式返回,返回的是四个元素的数组


image.png
7.6.用list()结构和each()配合完成数组的遍历操作

示例:


image.png
7.7.数组的键值操作类函数
image.png

1.array_values():获取数组中所有元素的值,重新打包,并以默认索引数组返回
示例:


image.png

2.array_keys():获取数组中所有元素的键名,重新打包,并以默认索引数组返回
示例:


image.png

3.array_key_exists():检测键名是否存在于数组
示例:
image.png

4.in_array()函数与array_search()函数

in_array()函数:判断数组中是否存在某个值
该函数有三个参数,第一个是要查询的值,第二个是目标数组,第三个参数true,是否开启严格模式,如果开启,则值与类型必须完全匹配。
字符类型区分大小写
示例:


image.png

array_search()函数:两个参数,第一个要查询的值,第二个是要查询的数组,第三个是严格模式。返回值,如果找到,返回键名;如果没找到,返回空。
示例:
image.png
7.8.数组的统计操作类函数
image.png

1.count()函数:获取数组元素数量,返回整数
count(参数1,参数2);参数1是要查询的数组,参数2默认0,只查询一维数组。参数2设置为1时,可查询多位数组。
示例:


image.png

2.array_count_value()函数
统计数组中元素值出现的次数,返回关联数组,键是原数组的值,值是该值出现的次数。
要统计的数组元素的值必须为整数或字符串。
示例:


image.png

3.array_unique():删除数组中重复的值
示例:
image.png
7.9.用回调函数对数组操作
image.png

1.array_filter($array,callback):数组过滤器
第一个参数是数组,第二个是回调函数
将数组中的值,依次逐个传入到回调函数中处理,只有处理结果为true的元素才允许出现在结果数组中。
示例:


image.png

2.array_walk($array,callback);
将数组中的键值依次传入callback中处理
功能:1:遍历数组 (效率不高)2:更新元素(更常用)
示例:


image.png

3.array_map();
可以操作多个数组
将回掉函数作用到每个数组上,并返回一个新数组,默认索引数组
回掉函数的参数数量,必须与要处理的数组数量一致
1)将回调函数作用到一个数组上
2)回调函数作用到多个数组中,以2个为例
示例:


image.png
7.10.数组的排序操作
image.png

1.sort($array)和rsort($array) 忽略键名,按值排序
sort($array):元素按值大小从小到大重新排序,根据排序后的顺序,键名重新生成
rsort($array):元素按值大小从大到小重新排序,根据排序后的顺序,键名重新生成
示例:
正向排序,反向排序同理


image.png

2.ksort($array)和krsort($array) 按键名排序
ksort($array):元素按值大小从小到大重新排序
krsort($array):元素按值大小从大到小重新排序
排序结束后,键值对对应关系不变

3.asort($array)和arsort($array) 按元素值排序,保留键值对应关系
asort:值排序,从小到大。保留键值对应关系
arsort:从大到小

4.array_multisort(数组1,数组2,数组3)
同时对多个数组或多维数组进行操作
排序标志:SORT_ASC升序,SORT_DESC降序
多个数组:


image.png
7.11.数组实现数据结构中的堆栈与队列操作
image.png

1.用数组实现堆栈操作:(先进后出)
array_push和array_pop函数
堆栈:数据的添加于删除都是在一端进行
array_push:入栈操作;将数据添加到数组尾部,返回值是数组当前长度。可入栈数组、或多个数据
示例:


image.png

array_pop:出栈操作;删除数组最后一个值,返回当前弹出的值。参数是当前数组
示例:


image.png

2.数组的队列操作:(后进先出)
队列:后进先出,最后添加的数据,最先出队
示例:


image.png

2.其他数组函数
array_rand(数组 , 数量);从数组中随机的取出一个或多个元素的键名。第二个参数传入取出的数量,默认1。
可以根据随机获取到的键名,来随机取出数组元素
image.png

shuffle():将数组乱序输出,原有键名全部删除,按照默认索引值重新排序
返回布尔值,1:表示成功;0,表示失败


image.png

array_sum():求数组元素值得和
range(1,10,2);输出一个从1到10的数组,步长为2

八、类与对象

1.面向对象编程简介

面向对象编程是一种思想
类是生成对象的模板
对象是类的一个实例
类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。

2.创建一个类以及它的属性和方法

class 声明一个类
属性的声明必须以访问控制符开头


image.png

创建对象的过程,就是类的实例化
类必须实例化才可以访问里边的属性和方法


image.png

对对象的复制并没有创建新对象,而是一个对象的引用
image.png

结果:相等

get_class();函数作用:查看某对象是从哪个类创建的。返回类名
如果在类的外部访问属性或方法,可以直接用对象调用
如果在类的内部访问属性或方法,必须使用伪变量$this,因为此时类并没有实例化。

3.创建对象的6种方法:类的实例化

3.1:用new 类名()来创建一个对象
如果不需要传入参数,可以省略去括号


image.png

3.2:将类名,以字符串的方式放在一个变量中
Demo1是一个类


image.png

3.3:用对象来创建对象,并且创建的是一个新对象,不同于对象的赋值操作


image.png

3.4用new self()
在类中添加如下代码:


image.png

通过对象把这个类复制给变量,也创建了新对象


image.png

3.5用new parent()创建一个对象:继承extend


image.png

既可以访问父类属性,也可以访问子类属性

3.6基于当前调用的类来创建:new static
new static和new self类似,当通过子类创建对象时两者会不同。
new static通过子类创建对象时,以子类为模板。
new self通过子类创建对象时,以父类为模板。
在类中添加代码:


image.png

创建对象时代码:


image.png
4.类常量的创建与访问:

类常量就是它的值在类中始终不变的量
类常量是用const关键字创建,不加$符,必须初始化
在类的方法中访问类常量:self::常量名


image.png

外部访问类常量:
方法1;类名::类常量名
方法2;类变量::类常量名
方法3;用当前类的对象来访问类常量
方法4;用类中的方法来间接访问类变量


image.png
5.类的自动加载

很多开发者在写面向对象的应用程序时对每个类的定义建立一个PHP源文件。一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表。
自动加载函数:__autoload()
当我们引入一个不存在的类时,自动调用它导入该类的文件。
示例:


image.png

(更常用)自定义导入函数:spl_autoload_register()
将自定义的类导入函数添加的函数栈中
示例:添加这部分代码,可以自动加载类


image.png
6.类的构造方法与析构方法

构造方法:用来实例化类,创建对象的。对象创建时调用
构造方法使用固定的方法名:__construct()


image.png

析构方法:__destruct()
对象销毁时自动调用,没有参数,
销毁变量时,执行析构方法


image.png
7.对象的封装

将类中的属性和方法,打包到对象中,对外只提供有限的公共接口。
对象的封装,主要是指对对象属性的封装,通过private访问控制符
示例:
类中属性,不能通过对象的属性访问,只能通过类中提供的get接口访问
类中的属性,也不能通过外部对象来修改,只能通过类中提供的set接口修改


image.png

修改类中属性的接口:


image.png

魔术方法:快速读取和修改类中的属性
__get(属性名):外部访问不存在或私有属性时自动调用
__set(属性名):外部给类中不存在或不可见属性赋值时自动调用

设置这两个魔术方法后,外部访问时可以直接调用此方法来访问。


image.png

检测和删除私有属性的魔术方法


image.png
8.类的继承和多态

子类:创建子类是为了扩展父类的功能,实现代码复用
继承使用关键字:extend PHP是单继承语言
在子类中重写父类方法,其访问权限不能低于原来的,原来是protected,那么现在应该是public
多态:是通过对父类中方法重写来实现的,重写一个与父类中同名的方法
父类:


image.png

子类:


image.png
9.类中静态成员的创建于访问技巧

静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用
如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用
使用self:: 关键字访问当前类的静态成员
示例:


image.png

外部对象不能访问类中的静态属性;
但是,
外部可以访问内部静态方法:


image.png
10.类中静态绑定与延迟绑定;self、parent、static

self与当前类静态绑定,代表当前类
parent与父类进行静态绑定,代表父类
示例:


image.png

访问本类中的静态属性static::就是当前类
静态绑定(self和parent);
静态延迟绑定(static);谁调用它,就和谁绑定
不同点:


image.png
11.对象的克隆;像变量值传递一样创建新对象

clone ;关键字,相当于值传递,将当前对象复制到新的变量中
比传统new一个对象效率高,更方便
示例:


image.png
12.访问一个不存在的方法或静态方法如何处理?__call()和__callStatic()详解;

当外部调用一个不存在的普通方法时,会自动调用类中的魔术方法:__call()
当外部调用一个不存在的静态方法时,会自动调用类中的魔术方法:__callStatic()
示例:


image.png

如何调用:


image.png
13.对象的序列化,传输和保存一个对象的方法

对象是没有对应实体的,程序结束,对象就会消失。要保存对象,就需要序列化
serialize(对象);序列化一个对象
__sleep();该方法没有参数,当序列化对象时,该魔术方法自动调用,将允许序列化的对象属性放在一个数组中返回
示例:


image.png

反序列化:
unserialize(对象);将之前序列化的对象解析输出


image.png

如果反序列化时存在__wakeup()方法,可以对反序列化中的对象属性进行修改。
image.png

结果:
image.png
14.抽象方法与抽象类

抽象方法钱需要关键字:abstract
抽象方法;声明一个方法,但是没有定义这个方法,也就是没有函数体。
抽象类就是一个模板,抽象类不能单独使用。
一个类中包含抽象方法,就是抽象类。
抽象类中可以有抽象方法也可包含普通方法
抽象类使用时,不允许实例化,必须创建一个子类来继承
集成抽象类的子类,必须重写抽象类中所有抽象方法
抽象方法不允许实例化,所以不能用来创建对象

示例:


image.png
image.png

结果:


image.png
15.接口技术:规范用户类的成员与实现

接口是一种特殊的类,它不使用class来创建,而使用关键字interface来声明。
接口中的成员中同样有属性和方法
接口成员中的属性:必须是类常量
接口成员中的方法:必须是抽象方法
访问控制符必须是public。默认可以不写
接口不允许实例化,所以需要一个类来继承接口,并实现接口中所有抽象方法
继承接口使用关键字:implements
PHP是单继承的,但是接口可以同时继承两个
接口示例:


image.png

继承接口:


image.png

结果:
image.png
16.trait特新的声明与使用技巧:实现代码复用的类方法集合

类中的代码可以分为两部分:
1:自己写的私有代码
2:从别处继承导入的公共代码
类中的公共或外部代码主要来源
1:父类
2:trait类(方法集)
创建一个trait类使用trait关键字
trait类中不能有类常量
trait类中可以有属性和方法
trait类不能进行实例化,只能在其他类中使用use调用(相当于复制),并在该类对象中调用。
声明trait类:


image.png

调用trait类:


image.png

结果:
image.png
17.命名空间

解决同一个脚本中成员命名冲突的问题
命名空间针对脚本中的函数、常量、类成员。因为都是作用于全局,不允许冲突
关键字namespace:可以声明一个命名空间,必须是代码第一行语句,前边不能有任何输出
实际开发中,一个文件最好只使用一个命名空间

18.对象的遍历:像遍历数组,查看对象属性

通常遍历的是外部可见的public属性
语法:都是foreach语句


image.png

示例:遍历公共属性


image.png

结果:
image.png

示例:如何遍历私有属性
在类的内部创建遍历属性方法,然后在外部调用函数


image.png

访问遍历函数:


image.png

结果:
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 一、会话控制(session与cookie) 1.cookie简介 Cookie是存储在客户端浏览器中的数据,我们...
    空谷悠阅读 625评论 0 5
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,364评论 1 17
  • session原理总结[转] 之前在学校的时候,只知道session与cookie的区别在于:session是保存...
    foolgry阅读 573评论 0 1
  • 注:本文转载自前端大全 背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称...
    楠小忎阅读 673评论 0 0
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,197评论 0 3