处理脚本让浏览器按照指定字符集解析的方法
header(‘Content-type:text/html;charset=utf-8’)

一、PHP代码标记

ASP标记:<% php代码 %>
短标记:<? php代码 ?>
脚本标记:
标准标记(常用):<?php php代码 ?>

二、php注释

行注释:一次注释一行 //或#
块注释:一次注释多行 /* */

三、php语句分隔符

语句分隔符:在php中,代码是以行为单位,系统需要通过判断行的结束,
该结束通常都是一个符号:分号 (;) (英文分号)

特殊说明:
1、php中标记结束符?>有自带语句结束的效果
2、php中其实有很多代码的书写并不是嵌入到HTML中,而是单独存在,通常书写习惯中就
不建议使用标记结束符?>,php会自动从开始到最后都是php代码

四、变量

php中所有变量都必须用$
定义:在系统中增加对应的变量名字
赋值:可以将数据赋值给变量名(可以在定义的同时赋值)
可以通过变量名访问数据
可以将变量删除unset()

变量命名规则

php中所有变量都必须用$开始
名字由字母、数字和下划线"_"构成,但是不能以数字开头

预定义变量

提前定义的变量,系统定义的变量,储存许多需要用到的数据(预定义变量都是数组)

$_GET;获取所有表单以GET方式提交的数据
$_POST;POST提交的数据
$_REQUEST;GET和POST提交的数据
$GLOBALS;PHP中所有全局变量
$_SERVER;服务器信息
$_SESSION;session会话数据
$_COOKIE;cookie会话数据
$_ENV;环境信息
$_FILES;用户上传的文件信息

可变变量

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

$a=‘b’;
$b=‘bb’;
$a;(a;(a;(b)

变量传值

将一个变量赋值给另外一个变量

值传递:将变量保存的值赋值一份,然后将新的值给另外一个变量(两个变量没有关系)
引用传递:将变量保存的值所在的内存地址,传递给另外一个变量,两个变量指向
同一块内存空间(两个变量是同一个值)

在内存中,通常有以下几个分区
栈区:程序可以操作的内存部分(不存数据,运行程序代码)
代码段:存储程序的内存部分(不执行 )
数据段:存储普通数据(全局区和静态区)
堆区:存储复杂数据,大但是效率低

常量

用来保存数据

常量:const/constant
常量一旦定义,通常数据不可改变(用户级别)

常量定义形式

1、使用定义常量的函数: define(‘常量名’,常量值);
2、const 常量名=值;

常量命名规则

1、常量不需要使用$,一旦使用系统就会认为是变量
2、常量的名字组成由字母 、数字和下划线组成,不能以数字开头
3、常量一般是大写字母
4、常量命名规则比变量更松散,可以使用特殊字符(只能用于define)

注意细节:
1、define和const定义的常量是有区别的,在于访问权限的区别
2、定义常量通常不区分大小写,但是可以区分,可以参照define函数的第三个参数

常量使用形式

与变量使用相同,但不可改变值
有的时候还需要另外一种形式来访问(针对的是特殊名字的常量)
需要用到另外一个访问常量的函数:echo constant(‘常量名’);

说明
1、凡是数据会可能变化的,那么肯定是用变量
2、数据不一定会变的,两者都可,一般用变量
3、数据不允许被修改的一定用常量

系统常量

系统帮助用户定义的常量,用户可以直接使用

常用的系统常量
PHP_VERSION: PHP版本号
PHP_INT_SIZE: 整形大小
PHP_INT_MAX: 整形能表示的最大值(PHP整形允许出现负数,带符号)

在PHP中还有一些特殊的常量,他们有双下划线开始+常量名+双下划线结束
这种常量称之为系统魔术常量:魔术常量的值通常会跟着环境变化,
但是用户改变不了
DIR:当前被执行的脚本所在电脑的绝对路劲
FILE:当前被执行的脚本所在的电脑的绝对路劲(带自己文件的名字)
LINE:当前所属的行数
NAMESPACE:当前所属的命名空间
CLASS:当前所属的类
METHOD:当前的方法

数据类型

数据类型:data type,在PHP中指的是储存的数据本身的类型,而不是变量的类型
PHP是一种弱类型语言,变量本身没有数据类型

PHP的八种数据类型

三大类八小类

简单(基本)数据类型(4个小类)
整型:int/integer,系统分配4个字节储存
浮点型:float/double,系统分配8个字节存储,表示小数或者整型存不下的整数
字符串型:string,系统根据实际长度分配,表示字符串(引号)
布尔类型:bool/boolean,表示布尔类型,只有两个值:true和false

复合数据类型(2个小类)
对象类型:object 存放对象(面向对象)
数组类型: array存储多个数据(一次性)

特殊数据类型
资源类型:resource 存放资源数据(PHP外部数据,如数据库、文件)
空类型: NULL 只有一个值就是NUUL(不能运算)

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

在PHP中有两种类型转换方式
1、自动转换:系统根据需求自己判定,自己转换(用的比较多,效率偏低)
2、强制(手动)转换:人为根据需要的目标类型转换
强制转换规则:在变量之前增加一个(),里面写上转换的类型,其中NULL类型用到
unset()

在转换过程中,用的比较多的是BOOL类型(判断)和数据类型(算术运算)

–>BOOL true或false,在PHP中比较少类型转换变成False

–>数值
1、BOOL true=1,false=0
2、字符串转数值:
2.1以字母开头,永远为0
2.2以数字开头,取到碰到字符串中为止(不会同时包含两个小数点)

类型判断

通过一组类型判断函数,来判断变量,最终返回变量所保存数据类型(相同返回TRUE,不同返回FALSE),
是一组以is_开头后面跟类型名字的函数:is_xxx(函数名)
Bool类型不能用echo来查看,可以使用var_dump结构查看——var_dump(变量1,变量2……)
还有一组函数可以用来获取以及设定数据(变量)的类型
gettype(变量名):获取类型,得到的是该类型对应的字符串
settype(变量名,类型):设定数据类型;与强制转换不同
1、强制转换变量名,是对数据复制的内容进行处理(不会改变实际存储的内容)
2、settype会直接改变数据本身

整数类型

保存整数数值(有一定范围限制),4个字节,最大32位
在PHP中默认是有符号类型(区分正负数)
在PHP中提供了四种类型的定义:十进制,二进制,八进制,十六进制
$a=120; //10进制
$a=0b110; //2进制
$a=0120; //8进制
$a=0x120; //16进制

decbin(); //10—>2
decoct(); //10—>8
dechex(); //10—>16
bindec(); //2—>10
bin2hex(); //2—>16

浮点数类型

小数类型,超过整型所能存储范围的整数(不保证精度),精度大概在15个有效数字
$f=1.23;
$1.23e10; //科学技术法,其中e表示底为10即1.23*(10^10)
不要用浮点数做精确判断

布尔类型

两个值true和false,通常用于比较
在进行某些数据判断时候,需要特别注意类型转换
empty();判断数据的值是否为"空",不是NULL,如果为空返回true,不为空返回false
isset();判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false

运算符

连接运算符

1 . 将两个字符串连接到一起
2 .= 将左边的内容与右边的内容连接起来,然后重新赋值给左值

错误抑制符

一些无法避免且提前预知的错误,但不希望报错给用户
@ 在可能出错的表达式前使用@

三目运算符

表达式1 ? 表达式2:表达式3;
表达式1成立,执行表达式2,否则执行表达式3
建议使用括号

自操作运算符

++ //在原来值上加一
– //在原来的值上减一

前置自操作:同C语言
后置自操作:同C语言

衍生符号

+= //左边的加上右边的,再赋值给左边的
-= //左边的减去右边的,再赋值给左边的
*= //左边的乘上右边的,再赋值给左边的
/= //左边的除以右边的,再赋值给左边的
%= //左边的求余右边的,再赋值给左边的

计算机码

计算机码:计算机在实际储存数据的时候,采用的编码规则
计算机码:数值左边第一位用来充当符号位,正数为0,负数为1
原码:数据本身从十进制转到二进制的结果
反码:针对负数,符号位不变,其它位取反
补码:针对负数,反码+1

位运算符

1、系统进行任何位运算的时候都是补码
2、运算结束后都必须要转换成原码才是最终显示的数据

位运算:取出计算机中最小的单位(位 bit)进行运算

  1. &:按位与,两个位为1,才为1
  2. |:按位或,两个位为0,才为0
  3. ~:按位非,两个为0,才为1
  4. ^:按位异或,两个相同,为0
  5. <<:按位左移,整个位(32位),向左移1位,右边补0
  6. (>>):按位右移,整个位(32位),向右移1位,左边补符号位对应内容

流程控制

控制分类
顺序结构:代码从上往下,顺序执行
分支结构:给定一个条件,同时有多种可执行代码,然后会根据条件执行某一段代码
循环结构:在某个条件控制范围内,指定的代码可以重复执行

顺序结构

分支结构

if分支
if:给定一个条件,同时为该条件设置多种(两种)情况,然后通过条件判断来实现具体的执行段

基本语法

最简if:

if(条件表达式){//满足条件所要执行的代码段}

基础if:

if(条件表达式){//满足条件所要执行的代码段}
else{//不满足条件所要执行的代码段}

复杂if:

if(条件表达式1){//只满足1的代码}
elseif(条件表达式2){//只满足2的代码}
elseif(条件表达式3){//只满足3的代码}...
else{//不满足所有的代码}

如果判断条件不一致,建议使用嵌套

switch分支
有一组情形存在,通过一个条件,通常有多个值,但是每一个值都会有
不同的代码执行

switch判断方式:是将条件放在分支结构内判断

switch(条件表达式)
{case a: 代码; break;case b: 代码...default: 代码;break;
}

循环结构(for,while,do-while,foreach(专门针对数组))

for循环

for(条件表达式1;条件表达式2;条件表达式3)
{//条件表达式1:定义初始化条件//条件表达式2:边界判定,限定循环执行的次数//条件表达式3:用来执行条件变化//循环体
}

while循环

条件初始化

while(条件表达式)
{//条件表达式就是边界条件循环体;循环条件的变化;
}

do-while循环

do
{循环体;循环条件的变化;
}while(循环执行的条件);

循环控制

在循环内部对循环本身进行控制

中断控制:continue;

终止控制:break;

流程控制代替语法

PHP本身是嵌入到HTML中的脚本语言,需要在HTML中书写一些关于判断或者循环的结构语法,必须符合PHP标签规范,需要HTML
与PHP进行混搭,如果使用原始的PHP代码那么会非常不美观

在PHP书写到HTML中的这些大括号不美观,所以PHP提供了一种替代机制,让其可以不用书写大括号
for(; ;){ ----> for( ; ; ):
} ----> endfor;

PHP中的替代语法
PHP在HTML中只做数据输出,输出通常伴有条件判断和循环操作,因此PHP提供了对应分支结构和
循环结构的替代语法,全部都是对应的一个模式
{ ----> :
} ----> end+对应的起始标记替代

文件包含

在一个PHP脚本中,去将另一个PHP文件包含进来,去合作完成一件事情

文件包含作用
1.要么使用被包含文件中的内容,实现代码的共享(重用),向上包含(索要)
向上包含:在当前脚本要用某个代码之前包含别的文件

2.要么自己有东西可以给别人用,实现代码的共享(重用),向下包含(给予)
向下包含:在自己有某个东西的时候,需要别的脚本来实现(自己代码写完之后包含其他文件)

最大的作用:分工协作

文件包含四种形式
include: 包含文件
include_once: 系统会自动判断文件包含过程中,是否已经包含过
require: 与include相同
require_once: 与include_once相同

包含基本语法
include ‘文件名’;
include (‘文件名’); //文件名字:路径

向上包含:是先包含文件,后使用文件中的内容
向下包含: 是先准备内容,然后包含另外的文件,在另外的文件中,使用当前的内容

文件加载原理

PHP代码的执行流程
1、读取代码文件(PHP程序)
2、编译:将PHP代码转换成字节码(生成opcode)
3、zendengine来解析opcode,按照字节码进行逻辑运算
4、转换成对应得HTML程序

1、在文件加载(include或者require)的时候,系统会自动的将被包含文件中的代码相当于嵌入到当前文件中
2、加载位置:在哪加载,对应的文件中的代码嵌入的位置就是对应的include位置
3、在PHP中被包含的文件是单独编译的

include和include_once的区别
include:系统会碰到一次,执行一次,如果对同一个文件进行多次加载,那么系统会执行多次
include_once:系统碰到多次,也只会执行一次

require和include的区别
本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样
include的错误级别较轻,不会影响后面代码执行
require的错误级别大,会影响后面的代码执行

文件加载路径

文件在加载时需要指定文件路径才能保证PHP正确的找到对应的文件

文件加载路径包含两大类
1、绝对路径:
从磁盘的根目录开始(本地绝对路径)
Windows:盘符 C:/路径/PHP文件
Linux:/路径/PHP文件
从网站的根目录开始(网站绝对路径)
/: 相对于网站主机名字的路径
localhost/index.php
2、相对路径:从当前文件所在目录开始的路径
. 或 ./ : 当前文件夹
…/ : 当前文件夹的上一层文件夹

两个区别
1、绝对路径相对效率偏低,但是相对安全(路径不会出问题)
2、相对路径相对效率偏高,但是容易出错(相对路径会发生改变)

文件嵌套包含

一个文件包含另外一个文件,同时被包含的文件又包含了另外一个文件

嵌套包含的时候容易出现相对路径出错的问题,相对路径会因为文件的包含而改变(./和…/)
windows下面,每一个文件夹下都有.和…的文件夹

函数

将实现某一个功能的代码块(多行代码)封装到一个结构中。从而实现代码的重用

定义语法
函数有几个对应的关键点:function关键字、函数名、参数(形参和实参)、函数体和返回值

基本语法如下
function 函数名(参数)
{
//函数体
//返回值:return 结果
}

定义函数的目的:是为了实现代码的重用,一个功能一个函数简单明了)

函数的使用:通过访问函数的名字+();
//如果函数在定义的时候有参数,则在调用时必须使用参数

函数是在代码执行阶段,碰到函数名字才会调用

函数调用特点:函数的调用可以在函数定义之前

函数命名规范

由字母、数字、下划线组成,不能以数字开头
命名一般规则
1、驼峰法:除了第一个单词外,后面的所有单词的首字母均大写
2、下划线法:单词小写,通过下划线连接

在一个脚本周期中,不允许出现同名函数(在一个系统开发中不会使用同名的函数)

静态变量(static):

1.为了统计当前函数被调用的次数
2.为了统筹函数多次调用得到的不同结果

可变函数:

当前有一个变量所保存的值,刚好是一个函数的名字,那么就可以使用变量+()来充当函数名使用
$a=‘display’;
function display()
{
}
//可变函数
$a();

匿名函数:

没有名字的函数
基本语法:
$a = function()
{
函数体;
};
变量保存匿名函数,本质得到的是一个对象

闭包

闭包:closure,一词来源于一下两者的结合,要执行的代码块(由于自由变量被包含在代码块中,
这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)

伪类型

伪类型:假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看
操作手册从而更方便学习

伪类型主要有两种
mixed:混合的,可以是多种PHP中的类型
number:数值的,可以是任意数值类型

常用系统函数

1)有关输出的函数
print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号
print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,
只会输出值(数组打印使用比较多)

2)有关时间的函数
date():按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数)
time():获取当前时间对应的时间戳
microtime():当前时间戳微秒数
strtotime():按照规定格式的字符串转换成时间戳

3)有关数学的函数
max():指定参数中最大的值
min():指定参数中最小的值
rand():得到一个指定区间的随机整数
mt_rand():与rand一样,效率高
round():四舍五入
cell():向上取整
floor():向下取整
pow():求指定数字的指定指数次的结果
abs():绝对值
sqrt():求平方根

4)有关函数的函数
function_exists():判断指定的函数名字是否在内存中存在
func_get_arg():在自定义函数中去获取指定数值对应的参数
func_get_args():在自定义函数中获取所有的参数(数组)
func_num_args():获取当前自定义函数的参数数量

错误处理

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

错误分类

1)语法错误:用户书写的代码不符合PHP的语法规范,语法错误会导致代码在编译过程中不通过是,所以
代码不会执行(parse error)
2)运行时错误:代码编译通过,但是代码在执行的过程中会出现一些条件不满足导致的错误(runtime error)
3)逻辑错误:程序员在写代码的时候不够规范,出现了一些逻辑性的错误,导致代码正常执行,但是
得不到想要的结果

错误代号

1)系统错误
E_PARSE:编译错误,代码不会执行
E_ERROR:fatal error 致命错误,会导致代码不能正确继续执行
E_WARNING:warning,警告错误,不会影响代码执行,但是可能得到其他结果
E_NOTICE:notice,通知错误,不会影响代码的执行
2)用户错误:E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE
用户在使用自定义错误触发的时候,会使用到的错误代号
3)其他:E_ALL
代表着所有从错误(通常在执行错误控制的时候使用比较多),建议在开发过程中使用

所有以E开头的错误常量(代号)其实都是由一个字节存储,然后每个错误占据一个对应的位
如果想进行一些错误的控制,可以使用位运算进行操作
排除通知级别:notice E_ALL & ~E_NOTICE
只要警告和通知:E_WARNING | E_NOTICE

错误触发

程序运行时触发:系统自动根据错误发生后,对比对应的错误信息,输出给用户;主要针对代码
的语法错误和运行时错误

人为触发:知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误触发
trigger_error(错误提示,E_USER_ERROR); 加了E_USER_ERROR之后的代码不会执行

错误显示设置

哪些错误显示以及如何显示
在PHP中,其实有两种方式
1.PHP配置文件:全局配置,php.ini文件
display_errors:是否显示错误
error_reporting:显示什么级别的错误

2.可以在php脚本中设置:在脚本中定义的配置项级别比配置文件高
error_reporting(); 设置对应的错误显示级别
ini_set(‘配置文件中的配置项’,配置值);

在实际中,不会直接将错误给用户看,所以一般不显示错误,但是不可能避免会出现漏洞
需要保存到日志文件中,需要在PHP配置文件或者代码中(ini_set)设置对应的error_log配置项

错误日志设置

1.开启日志功能
2.指定路径

自定义错误处理

最简单的错误处理:trigger_error()函数,但是该函数不会阻止系统报错
用户可以自定义错误处理函数,然后将该函数增加到系统错误处理的句柄中,然后系统会在碰到
错误之后,使用用户定义的错误函数
1.将用户自定义的函数放到系统中 set_error_handler()
2.自定义错误处理函数,系统有要求
errno,errstr(必须参数)

用法
1.定义函数
2.修改错误机制
当前属于简单自定义,如果要复杂,可以在某些影响代码功能的错误发生后,让用户跳转到某个
指定的界面

字符串

字符串定义语法

1.单引号字符串:使用单引号
2.双引号字符串:使用双引号
引号方式比较适合定义一些比较短的或者没有结构要求的字符串
如果有结构要求或者内容较长,可以使用以下两种
3.nowdoc字符串:没有单引号的单引号字符串
$str = <<<‘边界符’
字符串内容
边界符;
4.heredoc字符串:没有双引号的双引号字符串
$str = <<<边界符
字符串内容
边界符;

heredoc和nowdoc在网页源代码中会保持定义的格式

字符串转义

转义:+字母
\r\n:回车换行
PHP中常用的转义符号
’ :在单引号字符串中显示单引号
" :在双引号字符串中显示双引号
\r :回车(理论上是回到当前行的首位置)
\n :代表新一行
\t :类似tab键
$ :在PHP中使用$符号作为变量符号,需要识别

其中单引号能够识别 ’ 双引号不能识别 ’ 其余均可
因为双引号中可以识别KaTeX parse error: Expected '}', got 'EOF' at end of input: …),给变量加上一组大括号 如{a}

结构化定义字符串变量的规则
1.结构化定义字符串对应的边界符有条件
1.1上边界符后面不能跟有任何内容
1.2下边界符必须顶格
1.3下边界符后面只能跟分号,不能跟任何内容
2.结构化定义字符串的内部的所有内容都是字符串本身(包括字符串)

字符串长度

1.strlen()得到字符串的长度,以字节为单位
中文在utf-8下占3个字节
2.多字节字符串的长度问题,包含中文长度
3.多字节字符串扩展模块:mbstring扩展
mbsrting扩展针对的是一些关于字符统计,strlen只是针对标准交换码ASCII,mbsrting会针对不同的
字符集

字符串相关函数

1.转换函数:implode() explode() str_split()
implode(连接方式,数组):将数组中的元素按照某个规则连接成一个字符串
explode(分割字符的方式,目标字符串):将字符串按照某个格式分开变成一个数组
str_split(字符串,字符串长度):按照指定长度来分离字符串得到数组

2.截取函数: trim() ltrim() rtrim()
trim(字符串,[,指定的字符]):默认为去除两边的空格,但也可以指定去除内容,从两边开始去除指定的内容直到碰到不是
的为止
ltrim():去除左边的
rtrim():去除右边的

3.截取函数: substr() strstr()
substr(字符串,起始位置(从0开始),[,长度]):指定位置开始截取字符串,可以截取指定长度
strstr(字符串,匹配字符(指定位置)):从指定位置开始截取到最后

4.大小转换函数:strtolower() strtoupper() ucfirst()
strtolower():全部小写
strtoupper():全部大写
ucfirst():首字母大写

5.查找函数:strpos() strrpos()
strpos():查找首次出现的位置
strrpos():查找最后出现的位置

6.替换函数:str_replace()
str_replace(匹配目标,替换的内容,字符串本身):将目标字符串的部分字符进行替换

7.格式化函数:printf() sprintf()
格式化输出数据

8.其他:str_repeat(),str_shuffle()
str_repeat():重复某个字符串N次
str_shuffer():随机打乱字符串

数组

数组:array,数据的组合,指将一组数据存储到一个指定的容器中,用变量指向该容器

数组定义方法

1.变量=array(元素1,元素2,元素3...)2.变量=array(元素1,元素2,元素3...) 2.变量=array(元素1,元素2,元素3...)2.变量=[元素1,元素2,元素3…]
3.隐形定义数组:给变量增加一个中括号,系统自动变成数组
$变量[]=值1;//如果不提供下标也可以,系统自动生成(数字)
$变量[下标]=值;//中括号里面的内容为下标,可以是字母(单词)或数字,与变量命名的规则类似

数组特点

1.可以整数下标或者字符串下标
如果数组下标都为整数:索引数组
如果数组下标都为字符串: 关联数组
2.不同下标可以混合存在:混合数组
3.数组元素的顺序以放入顺序为准,与下标无关
4.数字下标的自增长性:从0开始,如果后面手动增加一个序号,则其后的下标从该序号自增
5.特殊值下标的自动转换
布尔值:TRUE和FALSE
空:NULL
6.PHP中数组元素没有类型限制
7.PHP中数组元素原则上没有长度限制
补充:PHP中数组是很大的数据,所以储存位置是堆区,为当前数组分配一块连续的内存

多维数组

数组里面的元素还是数组

二维数组

数组中所有的元素都是一维数组

多维数组

异性数组

数组中元素不规则,有普通基本变量也有数组

数组遍历

简单提取:
$arr=array(0=>array(‘name’=>‘Tom’),1=>(‘name’=>‘Jim’)) //二维数组
//访问一维元素
$arr[0]; //结果:array(‘name’=>‘Tom’)
//访问二维元素
$arr[1][‘name’]; //结果:Jim

foreach遍历语法

foreach(数组变量as[数组变量 as[数组变量as[下标 =>]KaTeX parse error: Expected '}', got 'EOF' at end of input: 值) { //通过下标访问元素的下标;通过$值访问元素的值
}

通常:如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值
在进行储存定义时,通常二维数组不会两个维度的下标都为数字,一般第一维为数字,第二维为
字符串,一般只对第一维进行遍历,取得二维数组元素,然后直接下标进行访问

foreach遍历原理
本质在数组内部有一个指针,默认指向第一个元素,foreach利用指针获取数据,同时移动指针
1.foreach可以重置指针:让指针指向第一个元素
2.foreach循环:通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量中(如果存在)
将值取出来放到对应的值变量中(指针下移)
3.进入到循环内部,开始执行
4.重复2和3,直到在第二步的时候遇到指针取不到的内容

for循环遍历数组

基于已知边界条件(起始和结束)然后有条件的变化
因此:for循环遍历数组有对应条件
1.获取数组长度:count(数组)得到数组元素的长度
2.要求数组元素的下标是规律的数字
例子:

$arr = array(1,2,3,4,5,6,7,8,9);
for($i=0,$len=count($arr);$i<$len;$i++)
{echo 'key is : '.$i.' and value is : '.$arr[$i].'<br/>';
}

while配合each和list遍历数组

while是在外部定义边界条件,如果要实现与for一样
php7中each被弃用

each函数:each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后能将数组指针
下移,同时将拿到的数组元素下标和值以一个四个元素的数组返回
0下标 => 取得元素的下标值
1下标 => 取得元素的值
key下标 => 取得元素的下标值
value下标 => 取得元素的值
each取不到结果(数组最后),返回false

list函数:list是一种结构,不是一种函数(没有返回值),是list提供一堆变量去从一个数组中取
得元素值,然后依次存放到对应的变量当中(批量为变量赋值:之来源于数组),list必须从索引数
组中去获取数据,而且必须从0开始

list语法

$arr = array(1,2=>1);
list($first)=$arr;

while循环

$arr=array{1,'name'=>'Tom',3,'age'=>30}
while(list($key,$value)=each($arr))
{echo 'key is : '.$key.' and value is : '.$arr[$i].'<br/>';
}

数组相关函数

1.排序函数:对数组元素进行排序 按照ASCII码进行比较
sort(); 顺序排序(下标也重排)
rsort(); 逆序排序
asort(); 顺序排序(下标保留)
arsort(); 逆序排序
ksort(); 按照键名(下标值)顺序排序
krsort(); 按照键名逆序排序
shuffle(); 随机打乱数组元素

2.指针函数
reset(); 重置指针,将数组指针回到首位
end(); 重置指针,将数组指针指到最后一个元素
next(); 指针下移,取得下一个元素的值
prev(); 指针上移,取得上一个元素的值
current(); 获取当前指针对应的值
key(); 获取当前指针对应的下标值
<注>next和prev会移动指针,有可能导致指针移动到最前或者最后(离开数组),导致数组不能使用
通过next和prev不能回到正确到的指针位置,只能通过end或者reset进行指针重置

3.其他函数
count(); 统计数组中元素的数量
array_push(); 往数组中加一个元素(数组末位)
array_pop(); 从数组中取出一个元素(数组末位)
array_shift(); 从数组中取出一个元素(数组首位)
array_unshift(); 给数组添加一个元素()数组首位
array_reverse(); 数组元素反过来
in_array(要找的元素,数组); 判断一个元素在数组中是否存在,返回BOOL值
array_keys(); 获取数组的所有下标,返回一个索引数组
array_values(); 获取数组的所有值,返回一个索引数组

排序算法

1.冒泡排序

排序思想
1.比较相邻的元素,如果第一个比第二个大,就交换两个
2.对每一对相邻元素做同样的工作,从第一对到结尾的最后一对,在这一点,最后的元素应该会是
最大数
3.针对所有的元素重复以上的步骤,除了最后一个
4.持续每次对越来越少的元素进行重复,直到没有任何一对数字需要比较

2.选择排序

排序思想
1.假设第一个元素为最小元素,加下下标
2.寻找右侧剩余的元素,如果有更小的,重新记下最新的下标
3.如果有新的最小,交换两个元素
4.往右重复以上步骤,直到元素本身是最后一个

3.插入排序

排序思想
1.设置监控哨x[0],将待插入记录的值赋值给x[0]
2.设置开始查找的位置
3.在数组中继续搜索,搜索中将第j个记录后移,直至x[0],key>=r[j].key为止
4.将r[0]插入r[j+1]的位置上

4.快速排序

排序思想
1.从数组中选出一个元素(通常第一个),作为参照对象
2.定义两个数组,将目标数组中剩余的元素与参照元素比较,小的一个数组,大的一个数组
3.第二部执行后,两个数组中的元素还是不对,再重复前两步

表单传值

GET传值

1.form表单

表单元素

2.a标签

3.location对象的href属性

4.location对象的assign()方法

POST传值

1.post表单方式的基本设定

表单元素

POST和GET的区别

a.Get传输的数据主要用来获取数据,不改变服务器上的资源
b.POST传输的数据主要用来增加数据,改变服务器上资源
c.传输方式上POST必须使用form表单,而GET可以使用Form表单和url
d.GET传输数据可以在url中对外可见,而POST不可见,GET传值最终会在url中全部显示
e.GET和POST能传输的数据大小不同,GET为2K,POST理论无限制(事实上,GET和POST本身没有数据长度限制,但是浏览器做了限制)
f.GET和POST能够传输的数据格式有区别:GET一般传输简单数据(数值/字符串),POST可以提交复杂数据(二进制等)

PHP接受数据的三种方式

表单元素的"name"属性的值作为数组的下标,而value属性对应的值就是数组的元素值
1.GET方式:接受GET方式提交的数据2._GET方式:接受GET方式提交的数据 2.G​ET方式:接受GET方式提交的数据2._POST方式:接受POST方式提交的数据
3.$_REQUEST方式:接受GET或POST方式提交的数据

复选框

####复选框表单项的命名方式

复选框:通常是将一类内容以同样(同名)的形式传递给后台,数据库存储通常是一个字段存储。复选框的特点,选中才会提交

1.在浏览器端,checkbox的name属性的值不论什么都会被浏览器毫无保留的提交
2.在PHP中POST/_POST/P​OST/_GET都会对同名name属性进行覆盖

解决方案:浏览器不识别,但是PHP认为[]有特殊性:系统自动认为该符号是数组的形式,所以PHP就会自动的将同名的但是带有[]的元素组合到一起形成一个数组

复选框的接受

PHP会自动组合同名数组

常见处理

1.单选按钮(type=“radio”)的数据处理
radio button:可以出现多个选择项,但是只能选择其中一个
a.表单中使用的name属性,使用同名即可
b.后台接收数据也不需要额外处理
c.数据库存储的话只需要一个字段存储普通数据即可
d.PHP拿到数据之后,组织SQL直接存储到数据表即可

2.多选按钮的数据处理
a.表单中name属性使用数组格式:名字
b.后台接受到数据之后,是一个数组(数组不能存储到数据库)
c.PHP需要将数组转换成指定格式的字符串:使用分隔符分割每一个元素并且形成字符串:implode(数组,‘分隔符’)
d.PHP组织SQL直接存储到数据库
e.如果是要取出数据,那么取出数据之后使用expload把字符串变成数组
expload(‘分隔符’,数组)

<注>implode()可以接收两种参数顺序,但是explode()不行

3.其他常规同名表单项的数据处理
除开radio单选框和checkbox复选框,很少会出现同名的表单项。如果非要使用同名的来进行管理,那么可以采用checkbox方式进行操作
1.表单中同名增加[]
2.PHP接受时数组处理
3.PHP转换成有格式的字符串
4.数据库字符串存储

复选框细节

如果复选框没有选中,那么浏览器就不会提交。因此在PHP接受使用复选框(单选框)数据的时候,应该先判断是否存在该数据
可以使用isset()先来判断是否存在,来保证复选框的接受

文件上传

原理

文件上传:文件从用户本地电脑通过传输方式(Web表单)保存到服务器所在电脑指定的目录下

1.增加文件所上传的表单,浏览器请求一个服务器的HTML脚本(包含文件上传表单)
2.用户从本地选择一个文件(点击上传框(按钮))
3.用户点击上传:文件会通过物联网传输到服务器上
4.服务器操作系统会将文件保存到临时目录,是以临时文件格式保存
5.服务器脚本开始工作:判断文件有效
6.服务器脚本将有效文件从临时目录移动到指定的目录下

表单写法

1.method属性:表单提交方式必须为POST
2.entype属性:form表单属性,主要是规范表单数据的编码方式
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值
text/plain 空格转换为"+",但不对特殊字符编码
3.上传表单:file表单

PHP后端处理

在PHP中有一个预定义变量$_FILES是专门用来存储上传的文件

$_FILE变量详解

1.name:文件在用户(浏览器端)实际存在的名字
2.tmp_name:文件上传到服务器后操作系统保存的临时路径
3.type:MIME(多功能互联网邮件拓展)类型,用来在计算机中客户端识别文件类型
4.error:文件上传的代号,用来告知应用软件,文件接受过程中出现了什么问题
5.size:文件大小

移动临时文件到目标位置

文件上传之后会保存到FILES中,那么访问文件信息的形式就是_FILES中,那么访问文件信息的形式就是F​ILES中,那么访问文件信息的形式就是_FILES[‘表单中name属性值’][‘元素信息’]
1.判断是否为上传文件:is_uploaded_file()
2.移动文件:move_uploaded_file()

多文件上传

针对一个内容但是不同文件说明:同名表单
针对是不同内容所以表单名字不一样:批量解决问题

多文件下的$_FILES格式

批量上传:
同名表单:将表单名字形成一个数组,而且同时将文件对应的五个要素:name,tmp_name,size.type,error都形成对应数量的数组
不同名表单:会形成5个不同的数组

多文件信息的遍历读取和处理

1.不同名多文件上传处理:按照表单名字从FILES取出来就可以直接使用(明确知道表单中有多少个文件上传),如果不确定表单中有多少个文件,不适合挨个去取,可以遍历_FILES取出来就可以直接使用(明确知道表单中有多少个文件上传),如果不确定表单中有多少个文件,不适合挨个去取,可以遍历F​ILES取出来就可以直接使用(明确知道表单中有多少个文件上传),如果不确定表单中有多少个文件,不适合挨个去取,可以遍历_FILES数组,挨个取出来实现文件上传
2.同名多文件上传处理:想办法得到一个文件对应的5个元素数组。从$_FILES中把对应的name\tmp_name\size\error\type挨个取出来。然后存放到不同的数组中

文件上传后续问题

实现上传功能代码的重复利用,封装文件上传函数
功能:上传文件
条件:条件判断
1.文件类型是否合适 外部指定MIME类型
2.文件存储到什么位置 外部指定
3.文件格式限制(文件后缀) 外部指定
4.文件大小限制 外部指定
结果:实现文件上传
1.成功:结果能够在以后看到:需要将文件路径和文件名字返回(存储到数据库)
2.失败:返回false,指定错误的原因(引用参数)

mysql拓展

PHP针对Mysql数据库操作提供的拓展:允许PHP当作MySql的一个客户端连接服务器进行操作

连库基本操作

连接数据库服务器

1.资源 mysqli_connect(服务器地址,用户名,密码)

$link=mysqli_connect(服务器地址,用户名,密码)

连接资源$link默认也是超全局的,任何地方都可以使用该资源进行数据库的其他操作

设置连接编码

保持客户端与服务器之间的沟通舒畅:同一"语言"(字符集)
1.形式1:mysql_query(“set names XXX”)
2.形式2:mysql_set_charset(“XXX”)
3.怎么确定要使用何种编码

选定要使用的数据库

1.形式1:mysql_query(“use XXX”)
2.形式2:mysql_select_db(“XXX”)

关闭连接

php-Study1相关推荐

  1. WINDOWSPHONE STUDY1:创建一个 Windows Phone 7 下的简单 RSS 阅读器

    在这篇文章中我们将为 Windows Phone 7 手机创建一个简单的 RSS (Really Simple Syndication) 阅读器.用户界面包含一个文本输入框用于输入 RSS 地址,以及 ...

  2. SWFT study-1

    学习swift第一节 国际银行金融网络-SWIFT概述 一.SWIFT网络系统 1.SWIFT简介 SWIFT 是"环球同业银行金融电讯协会"( Society for World ...

  3. SQL连接查询和嵌套查询详解

    连接查询 若一个查询同时涉及两个或两个以上的表,则称之为连接查询.连接查询是数据库中最最要的查询, 包括: 1.等值连接查询 2.自然连接查询 3.非等值连接查询 4.自身连接查询 5.外连接查询 6 ...

  4. 接口抽象类继承父类和子类

    1.接口是什么? 接口可以理解为一个特殊的抽象类,是由全局常量和公共抽象方法组成的. 所以,如果,一个抽象类的方法都是抽象的,那么就可以通过接口的形式来表示. class 用于定义类 interfac ...

  5. PHP中预定义的超全局数组

    我们先来了解一下什么是超全局数组: 自动全局变量----超全局数组 1.包含了来自web服务器,客户端,运行环境和用户输入的数据 2.这些数组是特别的 3.全局范围内自动生效,都可以直接使用这些数组, ...

  6. java 置信区间_仅从均值和标准差绘制置信区间

    我试图从数据的均值和标准差(std)绘制置信区间 . 这是我写的代码片段: MeanA=1.876; %mean of A STDA=0.018; % std of A MeanB=1.821; ST ...

  7. java冒泡遍历对象_Java经典排序算法(冒泡、选择、插入)

    排序算法说明 排序说明 对一序列对象根据某个关键字进行排序. 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b ...

  8. [官方] mysql 性能优化文档(中英文自译)

    大家好,我是烤鸭: 根据官方文档翻译并精简部分内容.建议有时间的朋友下载原版查看,全文106页pdf,快的话1-2天就能看完.自己翻译的有些地方可能不完整,欢迎指正. 官方pdf下载,需登录: htt ...

  9. MongDB集合文档操作符

    一.MongoDB - 连接 1.启动 MongoDB 服务 只需要在 MongoDB 安装目录的 bin 目录下执行 mongod 即可 执行启动操作后,mongodb 在输出一些必要信息后不会输出 ...

  10. mariadb mysql同步_MySQL(Mariadb)主从同步基础

    一.准备阶段 两台linux虚拟机centos7版本,都安装了mariadb 5.5.6 进行主从同步配置: 首先防火墙要开放3306端口, 主库服务器ip:192.168.211.100 从库服务器 ...

最新文章

  1. VB6 通过winsock控件数组实现客户端和服务器多对一通信
  2. java js 转换_[Java教程]javascript 类型转换。
  3. VS code 的变量设定
  4. python中的os abort_Python os.abort()用法及代碼示例
  5. 配置mysql数据库时出再错误:LookupError No installed app with label admin(亲测)
  6. docker 修改容器的主机名
  7. MySQL IFNULL()函数用法MySQL
  8. Page 56 WPF布局原则
  9. windows共享内存
  10. [Oracle]使用非滚动游标
  11. filebeat 配置文件详解
  12. linux内存管理(十)-页表管理
  13. 谁说 Vim 不好用?
  14. shell 基本命令linux,Linux中的shell基本命令的使用
  15. java ssm框架论文,ssm框架理解
  16. dos模拟器即时存档工具_DOS游戏运行模拟器 DOSBox0.72 1.2MB DOS游戏必备
  17. easyui treegrid php,easyUI TreeGrid | 学步园
  18. 谈我们的团队文化建设
  19. 微信公众号无限定时群发系统
  20. 招投标行业114个数据源盘点

热门文章

  1. 【NOIP2014提高组】石头剪子布
  2. wlop2020全奖励包_真的要来?网友发现新更新包拥有“夜魇暗潮2020”信息
  3. Ionic3.x 创建项目中的问题-IonIC start myApp tabs
  4. 减少不必要的App运营成本,是2022年中小开发者要留心的
  5. Macbook 投影仪连接问题
  6. 如何把计算机组成原理、操作系统、数据结构和计算机网络融会贯通,相互联系起来?
  7. MySQL 5.6 (Win7 64位)下载、安装与配置图文教程
  8. matlab计算胎心率,基于盲分离的胎心音心率检测算法与实现
  9. 基于容器云技术的典型遥感智能解译算法集成
  10. 学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据