28 03 2019

PHP基础 - 面向过程编程

一、PHP基础

        1.1 php语法

        1.1.1 PHP代码标记

        asp标记:<%  php代码  %>

        短标记:<?  php代码  ?>    

        短标记方式需要修改:short_open_tag = Off   改为  short_open_tag = On

        脚本标记:<script language="php"> php代码 </script>

        标准标记:<?php  php代码  ?>,标准标记可以省略结尾?>,以<?php   开始

        短标记需要开启php.ini配置文件,asp标记和script标记在php7中已经被移除,并且短标记在php7.3版本也已经移除!!!

        1.1.2 PHP语句分隔符

        在php代码中使用“;”英文太的分号作为语句分割符号


        1.2  php变量

        1.2.1 php变量基本概念

        image.png

        1.2.2 php变量使用

        image.png

        image.png

        1.2.3 php变量命名规则

        image.png

        1.2.4 预定义变量(又叫超全局变量)

        预定义变量:提前定义的变量、系统定义的变量!!!

        image.png

        1.2.5 可变变量

        含义:如果一个变量保存的值刚好是另一个变量的名字,那么可以直接通过访问一个变量得到另一个变量的值,在变量前面再多加一个$符号

        image.png

        1.2.6 变量传值

        image.png

        image.png

        值传递:

        image.png

        引用传递(址传递): $a = &$b

        image.png

        image.png

        1.3 常量

        image.png

        1.3.1 常量定义:

        1. 使用函数方式: define('常量名',‘常量值’);

        2. 使用const关键字方式: const 常量名 = 值;

        1.3.2 常量名定义规则:

        image.png

        注意:define和const定义常量的区别

        1. const是一个语言结构,define是一个函数

        2. const不能在条件语句中定义,而define可以

        3. const可在类中使用,而define不能

        4. const用于类成员变量的定义,而define不能用于类成员变量的定义

        5. const定义时大小写敏感,define可以通过第三个参(为true表示大小写不敏感)数指定是否大小写敏感

        1.3.3  系统常量

        image.png

        特殊系统常量(魔术常量):

        image.png


二、PHP数据类型

        2.1 数据类型说明

        在php中,指的是存储的数据本身的数据类型,而不是变量的类型

        2.1.1 PHP八种数据类型

        php中数据类型分为三大类八小类

        image.png


        2.2 类型转换

        在很多条件下,需要指定的数据类型,需要外部数据(当前PHP取得的数据),转换成目标数据类型

        2.2.1 转换类型的2种方式

        a、系统根据自己的判断转换(用得比较多,效率偏低)

        b、强制转换,人为根据需要的目标类型转换

        2.2.2 其他类型转布尔类型为空的情况:

        ① int 的0

        ② float 的0.0 

        ③ 空字符串

        ④ 字符串的 0

        ⑤ 空数组

        ⑥ null

        2.2.3 PHP类型比较

        image.png

        2.2.4 其它类型转数值的说明:

        image.png

        image.png

        2.2.5 整数类型

        image.png

        image.png

        2.2.6 浮点类型

        image.png

        2.2.7 布尔类型

        image.png

        强制类型转换

        image.png

        2.2.8 字符串类型

        字符串定义方式:

        ① 单引号方式   

        image.png

        ② 双引号方式

        image.png

        ③ 定界符声明

        image.png

        image.png

        单引号与双引号的区别:

        ① 单引号不能解析转义字符,只能解析转义斜线“\”和自己本身

        ② 单引号不能解析变量

        ③ 单引号可以嵌套双引号,单引号嵌套双引号需要加转义斜线"\"


        ④ 双引号可以解析转义字符

        ⑤ 双引号能解析变量,双引号中的变量使用  {}括起来

        ⑥ 双引号可以嵌套单引号,双引号嵌套双引号需要加转义斜线

        2.2.9 数组类型

        什么是数组:array,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中的所有数据

        数组定义方式:

        ① 使用array()关键字

        image.png

        image.png

        ② 使用中括号来包括数据

        image.png

        image.png

        ③ 隐形定义数组,给变量增加一个中括号,系统自动变成数组

        image.png

        image.png

        PHP数组的特点:

        ① 下标可以试数字,也可以是字符串;如果是数字下标,则为索引数组,如果是字符串下标,则为关联数组,如果在下标既有数字也有字母则为混合数组

        ② 数组下标的自增长,默认是从0开始的,如果中间有手动指定下标,下一次自增长则从最大的下标开始增长

        ③ 特殊下标

        image.png

        image.png

        说明:PHP下标不要使用特殊值,PHP元素没有类型限制,PHP中数组是很大的数据,所以存储位置是在堆区,系统为数组分配一块连续的内存地址!!!

        

        PHP数组遍历的原理:

        image.png

        特殊遍历:while()  +  list()  + each()

        image.png

        image.png

        

三、PHP运算符

        3.1 普通运算符,省略...

        3.2 连接运算符

            a. 使用“.”将多个字符拼接在一起

            b. 特殊的一个,使用“.=” 将字符连接起来(复合运算,将左边的内容与右边的内容连接起来,然后重新赋值给左边的变量)

            $a .= $b     等价于  $a = $a.$b;   

        3.3 错误抑制符

        PHP中有一些错误可能提前预知,但是又不希望用户看到,可以使用错误抑制符处理,在可能出错的表达式前面使用   "@",  @($a / $b)

        3.4 三目运算符

        有三个表达式参与的运算

        表达式1 ? 表达式2 : 表达式3    ;如果表达式1成立,则运行表达式2,否则运行表达式3

        三目运算符的复合使用:

        表达式1 ? (表达式2 ?表达式3 :表达式4) : (表达式5 ? 表达式6 : 表达式7)

        3.4 自操作运算符

        自己操作自己的运算符

        ++:在原来的值上+1

        --  :在原来的值上 -1

        PHP中自操作符“++” “--”分前置操作和后置操作,前置和后置如果只有自身操作,不参与其他运算,那么效果是一样的;但是自操作的同时还参与别的运算,那么效果就不一样了

        image.png

        3.5 计算机码

        image.png

        image.png

        注意:正数的原码、反码、补码都相同,是它本身

        3.6 位运算符

        image.png

        3.7 运算符优先级

        从上往下优先级在降低

        image.png

        

四、PHP流程控制语句

        4.1 流程控制

        流程控制就是代码的执行方向

        4.2 控制分类

        image.png

        4.3 省略...

        

五、PHP文件操作

        5.1 require和include的区别

        ① require是php文件在加载的时候就加载,include是php代码执行到include的时候才加载

        ② require加载的资源不存在报致命错误,include加载的资源不存在报警告错误,include报错不影响脚本继续执行,require报错则程序终止不再往下执行

        5.2 文件加载路径

        image.png

        绝对路径和相对路径的区别:

        ① 绝对路径相对效率偏低,但是相对安全

        ② 相对路径相对效率高一些,但是容易出错(相对路径发生改变)

        

六、PHP函数

        6.1 函数参数

        形参:形式参数,不具有实际意义的参数,是在函数定义的时候用的参数

        实参:实际参数,具有实际意义的参数,是在函数调佣时使用的参数,形参是实参的载体,实参在调用时通常需要传入到函数内部参与数据计算,那么需要在函数内部去找到实际数据所在的位置才能找到数据本身:需要实际调用的时候,将数据以实参的形式传递给形参:给形参赋值,从而使函数内部可以用到函数外部的数据

        image.png

        注意:

        ① 在php中允许实参多于形参,函数内部不使用而已

        ② 实参不能少于形参个数


        6.2 引用传递

        image.png

        image.png

        image.png

        image.png

        6.3 函数返回值

        image.png

        image.png

        image.png

        注意:

        ① 函数没有return返回值,打印结果时为null

        ② 函数return以后, return后面的代码不再执行

        6.4 函数作用域

        作用域:变量能够被访问的区域

        image.png

        image.png

        函数内部修改函数外部的值:

        image.png

        image.png

        image.png

        image.png

        image.png

        6.5 静态变量

        静态变量使用static修饰,是在函数内部定义的变量,用来实现跨函数共享数据的变量

        image.png

        image.png

        静态变量的原理:系统在进行编译的时候就会对static这一行进行初始化,为静态变量赋值;函数在再次调用的时候会跳过static 定义变量这一行

        6.6 可变函数

        当前有一个变量的值,刚好是一个函数的名字,那么就可以使用变量+()的方式来充当函数名使用

        image.png

        image.png

        6.7 匿名函数

        匿名函数:没有函数名的函数

        变量名 = function(){

            函数体

        };

        image.png

        image.png

        6.8 闭包函数

        image.png

        错误使用:!!!

        image.png

        image.png

        正确使用:!!!

        image.png

        image.png

        image.png

        

七、其它

        7.1 伪类型

        image.png

        image.png

        image.png

        7.2 部分常用函数

        image.png

        image.png

        7.3 错误处理

        错误处理:指的是系统(或者用户)在对某些代码进行执行的时候,发现有错误,就会通过处理错误的形式告知程序员

        错误分类:

        image.png

        错误代码:

        image.png

        错误触发:

        ① 程序运行时触发

        ② 人为触发

        image.png

        错误显示设置:

        哪些错误该显示,以及该如何显示,在PHP中有两种方式来设置当前脚本的错误处理

        ① php.ini配置文件:全局配置

        display_errors   是否显示错误

        error_reporting  显示什么级别的错误

        系统默认的error_reporting = E_ALL     display_errors = On

        ② 在php的脚本中去设置

        

        error_log配置项:

        ① 开启配置    log_errors = On           

        ② 错误日志保存路径   error_log = '/www/err/error.log'        

        

        7.4 会话技术

        7.4.1 COOKIE的基本使用

        cookie原理:

        服务器将数据通过HTTP响应存储到浏览器上,浏览器可以在以后携带对应的cookie数据访问服务器

        image.png

        image.png

        cookie使用:

        image.png

        image.png

        注意:cookie能够实现跨脚本共享数据,cookie是存在客户端电脑,没有提供删除的功能,只有设置一个过期时间让它过期清除或者设置变量值为''空字符串

        cookie高级使用 - 数组数据:

        image.png

        7.4.2 SESSION的基本使用

        session原理:

        session与浏览器无关,但是与cookie有关

        image.png

        image.png

        session基本使用:

        使用session的时候,任何时候都要开启session,$_SESSION是通过session_start()函数定义的没有直接定义

        image.png

        ① 设置session:

        如果想要存储数据到session中,只要不断给$_SESSION数组添加元素即可

        image.png

        image.png

        ② 获取session数据:

        image.png

        image.png

        会话技术的本质是为了实现跨脚本共享数据,在一个脚本中定义数据,在另一个脚本中保存数据

        ③ 删除session数据:

        image.png

        image.png

        清除session中全部数据:

        $_SESSION = array();


        session有关配置:

        image.png

        在服务器部署的时候改一下session.save_path路径就可以了,其他基本不用改

        session常用配置:

        image.png

        session配置的形式:

        ① php.ini配置:全局配置,修改php.ini中配置项

        ② 脚本配置:使用ini_set()函数来配置,只会对当前运行的脚本有效 

        session的销毁:

        session删除指的是删除session中的数据,session销毁指的是销毁session对应的文件,系统提供一个session_destroy()函数,会自动根据session_start()得到的SESSION_ID去找到指定的session文件,并把其删除。

        image.png


        垃圾回收机制:

        image.png


        垃圾回收参数配置:

        image.png


        session禁用:

        ① 禁用cookie后如何使用session

        原理:session技术需要用到cookie技术来保存sessionID,从而使PHP在跨脚本的时候得到相同的sessionID,从而访问同一个session文件

        解决思路:最终让session_start()在开启之前拿到原来的sessionID(另外一个脚本的)

        ② 实现无cookie使用session

        在PHP中要想解决没有cookie也能实现session的方式有两种:

        方案一:可以利用PHP提供的session_id()函数和session_name()函数来获得和设置sessionID或者name从而解决session_start()产生信的sessionID的情况

        1. 在session保存数据的脚本中获取sessionID和名字,一定要在session_start()后面获取id和name

        image.png

        image.png

        2. 相伴大将数据传递给另外一个脚本(使用url或者表单传值)

        image.png

        image.png

        3. 在需要的脚本中获取数据

        image.png

        4. 阻止session_start()产生新的ID,告诉它已经存在了,使用session_id($id);

        image.png

        image.png

        方案二:可以利用session机制中已经提供的解决方案自动操作(配置)

        原因1:默认session配置只允许cookie保存sessionID

        原因2:默认关闭了其他能够传送数据的方式只保留了cookie

        

        ① 修改PHP配置文件,开启其他方式传输sessionID,关闭只允许使用cookie传输功能

        image.png

        image.png

        ② 一旦开启,PHP会自动将sessionID和session名字在其他位置绑定数据,同时还会在session_start()的时候,考虑其他方式(表单)传输数据,而不是只有cookie

        注意:使用中几乎不用方式二,就用PHP默认的方式