函数定义常量

define

define(“PI”,3.14);

使用const关键字


const PI= 3;

特殊常量

双下划线开始+常量名+双下划线结束,称为魔术常量,魔术常量的值通常会跟着环境变化,但是不能改变

__DIR__:当前被执行脚本所在电脑的绝对路径

__FILE__:当前被执行脚本所在电脑的绝对路径(带自己文件的名字)

__LINE__:当前所属的行数

__NAMESPACE__:当前所属的命名空间

__CLASS__:当前所属的类

__METHOD__:当前所属的方法

自动转换

echo $a +$b;

强制转换

echo (float)$a,(float)$b;

类型判断

var_dump(is_int($a));

var_dump(is_string($a));

数据判断

empty():判断数据的值是否为空 isset():判断变量本身是否存在

$c1 = 1;

$c3 = ‘’;

var_dump(empty($c1),isset($c1));

var_dump(empty($c3),isset($c3));

三目运算符(分支结构)


a?b:c 如果a成立,那么执行b,否则执行c

如果表达式复杂,用括号包起来;b、c都可以是另外一个三目运算

$a =10;

$b =$a > 10 ? 100 : 0;

echo $b;

自操作运算符

$a =1, $b = 1;

$a++;++$b;

echo $a,$b; //独立运算

替代语法 {用:替代 }用end+对应的起始标记替代

  例: if(){}; -> if(): endif;

  可以使用替代语法的:if switch for while foreach

文件包含四种形式

在PHP中文件的包含有四种形式(两种大形式)

Include:包含文件

Include_once:系统会自动判断文件包含过程中,是否已经包含过(一个文件最多被包含一次)

Require:与include相同

Require_once:以include_once相同


include和include_once的区别

Include系统会碰到一次,执行一次;如果对统一个文件进行多次加载,那么系统会执行多次;

Include_once:系统碰到多次,也只会执行一次。

Require和include的区别

本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样

Include的错误级别比较轻:不会阻止代码执行 Require要求较高:如果包含出错代码不再执行(require后面的代码)

函数定义语法

Function 函数名([参数]){

//函数体

//返回值:return 结果; }

函数的调用特点

只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)

函数在定义的时候,对应的b形参采用的是取地址,a形参是取值,所以b改变了自己也改变了外部


php小结_数组


全局变量不能在局部空间内使用


php小结_数组元素_02


局部变量也不能在全局内访问


php小结_数组_03


使用超全局变量则可以不受全局变量和局部变量的限制

echo $GLOBALS[‘全局变量’];


php小结_数组_04


运用另外一种定义方法也可以实现局部访问全局变量:

Global关键字:是一种在函数里面定义变量的一种方式

1、 如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量);

2、 如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量


php小结_字符串_05


static:静态变量

静态变量的原理

系统在进行编译的时候就会对static这一行为初始变量赋值,在函数调用的时候会自动跳过static这一行,所以$count++可以一直执行递增

静态变量的使用:

1.为了统计当前函数被调用的次数

2.为了统筹函数多次调用得到的不同结果(递归思想)


php小结_数组元素_06


可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用。

将一个用户定于的函数传入另外一个函数去使用的过程,称之为回调过程,被传入的函数称之为回调函数


php小结_数组元素_07


变量保存匿名函数,本质得到的是一个对象(Closure)


php小结_字符串_08


closure:闭包

函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)


php小结_数组元素_09


引号方式

比较适合定义那些比较短(不超过一行)或者没有结构要求的字符串 如果有结构要求,或者内容超过一行,可以使用以下两种结构定义

nowdoc字符串:没有单引号的单引号字符串 heredoc字符串:没有双引号的双引号字符串


php小结_字符串_10


在PHP中系统常用的转义符号

\’:在单引号字符串中显示单引号

\”:在双引号字符串中显示双引号

\r:代表回车(理论上是回到当前行的首位置)

\n:代表新一行

\t:类似tab键,输出4个空格

$:在PHP中使用$符号作为变量符号,因此需要特定识别

单引号和双引号的区别: 1、 其中单引号中能够识别\’,而双引号中就不能识别\’


php小结_字符串_11


2、 双引号中因为能够识别$符号,所以双引号中可以解析变量,而单引号不可以


php小结_数组元素_12


双引号中变量识别的规则

1)变量本身系统能够与后面的内容区分:应该保证变量的独立性,不要让系统难以区分

2)使用变量专业标识符(区分),给变量加上一组大括号{}


php小结_数组元素_13


结构化定义字符串变量的规则

1、 结构化定义字符串对应的边界符有条件:

1.1 上边界符后面不能跟任何内容;

1.2 下边界符必须顶格:最左边;

1.3 下边界同样后面只能跟分号,不能跟任何内容;

2、 结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身


php小结_数组_14


基本函数strlen()

得到字符串的长度(字节为单位)

中文字符串在utf-8一个汉字占3个字节


php小结_数组_15


多字节字符串的长度问题

包含中文的长度

多字节字符串扩展模块

mbstring扩展(mb:Multi Bytes)


php小结_数组元素_16


Mbstring扩展针对的是一些关于字符统计:strlen只是针对标准交换码ASCII,mtstring会针对不同的字符集


php小结_字符串_17


1)转换函数:implode(), explode(), str_split()

Implode(连接方式,数组):将数组中的元素按照某个规则连接成一个字符串

Explode(分割字符,目标字符串):将字符串按照某个格式进行分割,变成数组

Str_split(字符串,字符长度):按照指定长度拆分字符串得到数组

2)截取函数:trim(), ltrim(), rtrim()

Trim(字符串[,指定字符]):本身默认是用来去除字符串两边的空格(中间不行),但是也可以指定要去除的内容,是按照指定的内容循环去除两边有的内容:直到碰到一个不是目标字符为止

Ltrim():去除左边的

Rtrim():去除右边的


php小结_数组元素_18


3)截取函数:substr(), strstr()

Substr(字符串,起始位置从0开始[,长度]):指定位置开始截取字符串,可以截取指定长度(不指定到最后)


php小结_数组元素_19


Strstr(字符串,匹配字符):从指定位置开始,截取到最后(可以用来去文件后缀名)

php小结_数组_20


4)大小转换函数:strtolower(), strtoupper(), ucfirst()

Strtolower:全部小写

Strtoupper:全部大写

Ucfirst:首字母大写

php小结_数组_21


php小结_字符串_22


5)查找函数:strpos(), strrpos()

Strpos(字符串,匹配字符):判断字符在目标字符串中出现的位置(首次)

Strrpos(字符串,匹配字符):判断字符在目标字符串中最后出现的位置

php小结_数组_23


6)替换函数:str_replace()

Str_replace(匹配目标,替换的内容,字符串本身):将目标字符串中部分字符串进行替换

php小结_数组元素_24


7)格式化函数:printf(), sprintf()

Printf/sprintf(输出字符串有占位符,顺序占位内容…):格式化输出数据

php小结_数组元素_25


8)其他:str_repeat(), str_shuffle()

Str_repeat():重复某个字符串N次

Str_shuffle():随机打乱字符串

php小结_字符串_26


在PHP中系统提供多种定义数组的方式

1、 使用array关键字:

最常用的 $变量 = array(元素1,元素2,元素3…);


php小结_数组元素_27


2、 可以使用中括号来包裹数据:

$变量 = [元素1,元素2…];


php小结_数组元素_28


3、 隐形定义数组:

给变量增加一个中括号,系统自动变成数组

$变量[] = 值1; //如果不提供下标也可以,系统自动生成(数字:从0开始)

$变量[下标] = 值; //中括号里面的内容称之为下标key,该下标可以是字母(单词)或者数字,与变量命名的规则相似


PHP数组特点

1) 可以整数下标或者字符串下标 如果数组下标都为整数:索引数组 如果数组下标都为字符串:关联数组

2) 不同下标可以混合存在:混合数组

3) 数组元素的顺序以放入顺序为准,跟下标无关

4) 数字下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始

5) PHP中数组元素没有类型限制

6) PHP中数组元素没有长度限制


补充:PHP中的数组是很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存。


php小结_字符串_29


特殊下标的转换

[false]:[1],[true]:[0],[NULL]:[""]


php小结_数组元素_30


二维数组

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


php小结_字符串_31


多维数组

在第二维的数组元素中可以继续是数组,在PHP中没有维度限制(PHP本质并没有二维数组)


但是,不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率。 异形数组(不规则数组)

异形数组


数组中的元素不规则,有普通基本变量也有数组。 在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问)


Foreach遍历

如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值


php小结_数组_32


获取下标


php小结_字符串_33


在进行数据存储定义的时候,通常二维数组不会两个维度的key下标都为数字,一般是一维为数字(无意义),二维为字符串(数据库表字段),所以在进行遍历的时候,通常是只需要针对一维进行遍历,取得二维数组元素,然后二维数组元素通过下标去访问。


php小结_数组元素_34


Foreach遍历的原理

本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取数据,同时移动指针。

Foreach($arr as $k => $v){ //循环体 }

1、 foreach会重置指针:让指针指向第一个元素;

2、 进入foreach循环:通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量$k中(如果存在),将值取出来放到对应的值变量 $v中;(指针下移)

3、 进入到循环内部(循环体),开始执行; 4、 重复2和3,直到在2的时候遇到指针取不到内容(指针指向数组最后)


For循环遍历数组 For循环

基于已知边界条件(起始和结束)然后有条件的变化(规律) 因此:for循环遍历数组有对应条件

1、 获取数组长度:count(数组)得到数组元素的长度 2、 要求数组元素的下标是规律的数字

php小结_字符串_35


While配合each和list遍历数组 While是在外部定义边界条件,如果要实现可以和for循环一样。

Each函数使用

each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:

0下标 – 》 取得元素的下标值 1下标 - 》 取得元素的值 Key下标 – 》取得元素的下标值 Value下标 – 》取得元素的值

如果each取不到结果(数组指针移动到最后),返回false

php小结_数组元素_36


List函数使用

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


错误:

php小结_数组元素_37


正确:

php小结_字符串_38


List与each配合特别好

each一定有两个元素就是0和1下标元素 List(变量1,变量2) =

each(数组);

是一种赋值运算,但是可以得到false结果(each取不到正确的结果),整个表达式为false


php小结_字符串_39


1)排序函数:

对数组元素进行排序,都是按照ASCII码进行比较,可以进行英文比较 sort():顺序排序(下标重排)


rsort():逆序排序


php小结_字符串_40


asort():顺序排序(下标保留)

arsort():逆序排序

ksort():顺序排序:按照键名(下标)

krsort():逆序排序

shuffle():随机打乱数组元素,数组下标会重排


2)指针函数


reset():重置指针,将数组指针回到首位

end():重置指针,将数组指针指到最后一个元素


php小结_数组元素_41


next():指针下移,取得下一个元素的值

prev():指针上移,取得上一个元素的值


php小结_数组元素_42


current():获取当前指针对应的元素值

key():获取当前指针对应的下标值


php小结_数组_43


注意事项:next和prev会移动指针,有可能导致指针移动到最前或者最后(离开数组),导致数组不能使用,通过next和prev不能回到真确的指针位置。只能通过end或者reset进行指针重置


3)其他函数

count():统计数组中元素的数量

array_push():往数组中加入一个元素(数组后面)

array_pop():从数组中取出一个元素(数组后面)

array_shift():从数组中取出一个元素(数组前面)

array_unshift():从数组中加入一个元素(数组前面)


PHP模拟数据结构


 栈:压栈,先进去后出来(FILO)


php小结_字符串_44


队列:排队,先进去的先出去(FIFO)


php小结_数组_45


array_reverse():数组元素反过来


php小结_数组_46


in_array():判断一个元素在数组中是否存在


php小结_数组元素_47


array_keys():获取一个数组的所有下标,返回一个索引数组

array_values():获取一个数组的所有值,返回一个索引数组


php小结_字符串_48