FavoriteLoading
0

重蔚php学习第二十七天——php可变变量,匿名函数

运算符:赋值运算符,算术运算符,错误抑制符,比较运算符,逻辑运算符,三元运算符,位运算符,连接运算符,自操作运算符(在项目计算当中,非常不建议使用多个自操作一起运算)

源码反码补码

  1. 整数的原码反码和补码一致,就是本身转化成二进制
  2. 负数在内存里保存的是补码形式

负数求补码:1.先求出源码,2.源码取反(符号位不变),3.反码加1

二进制求源码:

  1. 正数的话直接二进制转十进制
  2. 负数,有两种方式:第一种先补码-1,然后取反(符号位不变);第二种方式,先取反(符号位不变),再+1

流程结构:顺序结构,分支结构,循环结构

分支结构:if分支,switch分支

If可以实现任何分支,switch是对具体值使用(数值,字符串)

最简if:if(条件表达式){}

标准if:if(条件表达式){}else{}

赋值if:if…else if…else if…else

Switch要注意case中break的使用。

循环结构:for,while,do-while,foreach

For循环:已知循环次数

While循环:

Do-while循环:不管条件怎么样,都会至少循环一次(在条件变量判断前)

Foreach循环:针对PHP数组进行遍历

Continue:继续,中止当前循环的后续循环体,重新开始下一次循环

Break:跳出,完全终止整个循环,使循环结束

image002

循环控制,可以使用数字来指定操作的循环层数

image004

函数

系统函数和自定义函数

自定义函数的调用需要先定义(指的是代码区在调用函数之前已经存在该函数,这个与函数在脚本中与调用出的顺序没有关系)

被调用的函数执行结束,回到函数调用处。

 

函数基本要素:函数名,函数体,返回值,参数

 

在函数定义的时候:参数被称之为形参,形参没有值

在函数调用时传入的参数:实际参数,实参赋值给形参,所以形参是有值的

 

默认的参数的传递是值传递。

如果需要使用引用传值,那么需要在定义函数的时候对形式参数添加一个&符号。

image006

作用域:全局作用域,局部作用域

全局作用域:PHP中指的是函数之外定义的变量,只能在函数之外被使用,不能在函数里使用

局部作用域:在函数内部定义的变量,只能在当前函数里面使用

如果想在函数内部使用全局变量,PHP提供了两种方式

$GLOBALS直接将外部的变量的作用域扩展,$GLOBALS针对的外部变量本身,所有的操作跟在外部操作变量本身是一致的。$GLOBALS[‘变量名’],如果在函数内部对$GLOBALS进行unset操作,会删除外部变量。

Global关键字,在函数内部定义一个同名变量,该变量指向外部变量所对应的内存空间。所以在函数内部操作global对应的变量,会导致外部变量所对应的值的变化。如果对global定义的变量进行删除,只会删除函数内部变量对应的引用,而不会改变外部变量。

 

返回值:return关键字

Return可以返回任何类型的数据

Return可以没有任何返回值:return;//表示当前函数执行到这个地方结束了,后面代码不在执行

image008

什么时候使用return进行返回呢?又返回什么内容?

当我们需要函数进行返回某个数据的时候,就使用return进行相关数据的返回,如果不需要返回值的话,可以没有return。

可变变量

对一个变量的值再次进行变量操作

语法:$$变量名

前提:该变量名对应的值,与另外一个变量的名字相同。

image010

可变变量的原理:先将变量对应的值给取出来,然后与变量符号“$”进行合并,从而构造出一个新的变量名字,然后再对该变量进行读取

image012

匿名函数

隐藏名字,没有名字的函数

语法:通过一个变量接收函数对应的地址,从而实现没有名字的函数,匿名函数。

$变量名 = function(参数列表){

//函数体

};

 

匿名函数的使用

用的最多的地方,回调函数(callback),指的是当一个函数在运行的时候,需要调用其他的函数,这个其他的函数是通过函数的参数给传进去的。

定义匿名函数

image014

如何调用匿名函数?

函数没有名字,所以不能通过函数名字进行调用。

当前所了解的只有函数的内存地址。地址保存在变量里。只能通过该变量找到该函数。

调用匿名函数

语法:$变量名(参数列表);

image016

匿名函数的原理

image018

注意:如果要使用变量的形式调用函数,要保证变量在赋值的时候,是被赋值的一个函数内容。

 

可变函数

当一个函数并不是被直接通过函数名调用,而是通过变量去调用,变量的值对应的是函数名。

image020

原理

image022

闭包匿名函数语法

Function 函数名(参数列表){

//外部函数函数体

Return Function(新参数列表) use(外部函数的参数列表){

//内部函数的函数体

}

}

函数参数

函数参数的默认值,在定义函数参数,给形参指定一个默认的值。

image024

参数默认值的应用

为了保证函数的健壮性。有一些不是很重要非要用户填写的参数,就会使用默认值。

调用带默认值的函数,跟正常调用一样,只是在有默认值参数地方,可以选择不输入实际参数

image026

函数参数默认值定义和调用原理

image028

伪类型

在返回或者对某个变量要求指定类型,通常见得最多的是函数的返回值类型。

Mixed:混合的,不确定具体类型

连接数据库mysql_connect,连接成功返回一个资源,连接失败返回一个false

Number:数字的,返回一个数值

Callback:回调函数,这个通常是用在函数的参数列表

当某个函数执行的时候,需要调用一个额外的函数来实现。这个额外的函数就是回调函数。

Void:空,指的是没有返回值,或者函数调用不需要参数

当我们去查看操作手册的时候,能够理解函数的一些信息

数据类型转换

指的是将一个数据(值)的类型进行改变,转换成其他类型。

在PHP中,数据类型转换通常是系统自动实现的。自动转换。是因为PHP是弱类型语言。

 

什么情况下PHP会自动转化呢?

凡是数据操作,但是又不是符合操作类型的数据格式的时候,系统就会自动操作。

$a = 10;             //整型

$b = ‘123’;        //字符串

$a + $b;    //基本的算术运算,只能对数值进行运算,PHP会对$b进行转换,123,转化成数值再进行运算

$a . $b;     //字符串拼接,要求都是字符串,系统会对$a 转化成字符串格式’10’,然后再进行操作

If($a);       //判断布尔值,要求是布尔类型,系统会对$a转化成布尔值true,再进行判断

 

PHP自动转化很强大,所有用户不需要担心,使用不同的格式会出错。

但是,作为程序员的基本素质,是要控制代码每一行,所以不允许随便使用格式,在使用时,需要对数据类型进行判断。

 

如何进行数据类型判断?

is_bool:判断一个变量是否是布尔类型,如果是则返回true,不是返回false

is_float:判断一个变量是否是浮点型

is_integer:判断变量是否是整型

is_object:判断变量是否是对象

is_array:判断变量是否是数组

is_string:判断变量是否是字符串

is_resource:判断变量是否是资源

is_scalar:判断变量是否是标量(整型,浮点型,字符串,布尔)

is_null:判断变量是否为空

is_numeric:判断变量是否是数值(包含整型和浮点型)

image030

什么时候需要判断数据类型?

PHP不相信任何外来数据。凡是不是PHP自定义的变量,PHP都不相信。所有外来数据,PHP都需要对其进行判断。

image032

如何获得数据类型?

PHP使用gettype函数能够获得一个变量的数据类型

这里不能使用var_dump去打印gettype返回的结果,因为得到的结果是一个字符串

image034

如何改变数据类型?

Php提供了一个函数settype,设定一个变量的类型。

image036

注意:在改变变量的数据类型的时候,会对其指向的内存空间的值进行数据类型转换,从而导致数据值的改变。

强制数据类型转换

使用某种手段强制改变某个数据的数据类型。

语法:(目标数据类型)变量

改变的是变量值本身,不会去变量值对应的内存空间进行改变,相当于是copy了一份内存空间的值,然后对其进行改变。

Int:

Integer:转化成整型

Bool:

Boolean:转化成布尔型

Float:转化成浮点型

String:转换成字符串型

Array:转化成数组

Object:转化成对象

上面的各种强制转化与使用settype效果是一样的,区别在于settype能够提供很多种选择,可以随意的转换成需要的数据类型。

image038

不管是系统自动转化也好,还是强制转化也好。本质都将变量的值进行类型改变。因为变量没有数据类型,变量的值有数据类型。

如何实现公共代码的重用?不要每次都写。

欢迎分享本文,转载请保留出处!—重蔚自留地 站长邮箱:951076433@qq.com