PHP基础教程

1  PHP标签

1.1 常用标签

1.2 PHP脚本标签

注意:脚本标签的方式很少用,因为容易与javascript的标签混淆。

1.3 短标签

默认的,PHP已经不支持短标签语法,需要在配置文件中开启

short_open_tag = on

1.4 asp标签

<%   //PHP代码   %>

asp 标签不能直接使用,需要开启php.ini中asp标签


2  PHP变量

2.1 定义变量

语法:$变量名

  • $name
  • $school_number
  • $age1
  • $age2

2.2 变量命名规则

  • 1.必须以$符号开始
  • 2.变量名可以由字母,下划线和数字自由组合
  • 3.不能以数字开头
  • 4.可以是中文
  • 5.变量命名通常需要见名之意
  • 6.变量名字有多个单词组成的时候,可以使用两种方式
  • a)    驼峰法:schoolName
  • b)    下划线:school_name
  • 7.php中变量一般是在定义的时候就赋值

注意点:语言有强类型和弱类型之分

强类型:C,JAVA  ——先必须声明变量类型

弱类型:PHP

PHP是一种弱类型语言。指的是变量可以为任意类型,而不需要指定具体类型。

$age = 10;    //age变量理论上可以放置任何数据类型的值

2.3 使用变量

直接使用变量即可:前提条件是当前变量已经被赋值(定义)

输出:echo $变量名;

判断:if($变量名 == ‘值’)

2.4 修改变量

将原有变量进行重新赋值

  • 定义变量
  • $age = 10;
  • 修改变量
  • $age = 11;

2.5 删除变量

将变量所指向的值给释放掉(将变量本身释放)

unset($变量名);

案例

  • //输出已经释放的变量
  • $age = 10;
  • unset($age);
  • echo $age;//错误,未定义的变量

2.6 系统预定义变量

系统定义的变量称之为预定义变量,预定义变量有9个:

  1. $_POST:接收用户表单post方式提交的所有数据
  2. $_GET:接收用户表单get方式提交的所有数据
  3. $_REQUEST:接收用户get方式,post方式提交的数据,还有cookie数据
  4. $_FILES:接收用户上传的文件信息
  5. $_SESSION:存放session数据(存放在服务器)
  6. $_COOKIE:存放cookie数据(存放在浏览器)
  7. $GLOBALS:全局变量
  8. $_SERVER:保存服务器信息
  9. $_ENV:保存系统环境信息

2.7 可变变量

通过一个得到一个变量的值,将该值再次当做一个变量名从而得到另外一个变量的值。

$$name

2.8 变量间的传值

值传递:将一个变量的值赋值一份,然后赋值给新的变量

一个变量的变更不会影响另外一个变量的变更

引用传递:将一个变量的地址赋值给新的变量

在给变量赋值的时候,使用地址符号&获得一个变量的地址。


3 PHP常量

一旦被定义,就不能被修改,只能被使用的“量”叫做常量。

语法:define(‘常量名’,常量值);

3.1 常量的使用

  • 1.某个值不需要变化的时候。某些数学常量如π
  • 2.用于整个网站使用。
  • 3.凡是能使用常量去做的事情都可以使用变量去替代。常量是用来规范数据保证数据不被修改。

3.2 常量命名规则

  • 1.常量不能使用$符号
  • 2.其他命名规则与变量基本一致
  • 3.常量命名通常使用全部大写字母,多单词的常量都是使用下划线方式。
  • 4.常量与变量一样都区分大小写

3.3 系统预定义常量

  1. PHP_OS:操作系统内核
  2. PHP_VERSION:当前PHP的版本
  3. PHP_INT_SIZE:int类型所占的字节数
  4. PHP_INT_MAX:int类型能表示的最大值

3.4 魔术常量:可以自动变化的常量

  1. __FILE__:当前脚本的文件路径(绝对路径)
  2. __LINE__:当前所在的行数
  3. __DIR__:当前脚本所在的目录(PHP4以后才有)
  4. __FUNCTION__:当前函数的名字
  5. __METHOD__:当前方法的名字(类中的函数)

3.5 变量和常量的命名建议

  • a)不建议使用中文作为变量名
  • b)所有的变量或者常量,都建议使用字母配合下划线的方式去实现,变量中还可以配合数字

4 数据类型

三大数据类型:标量,复合,特殊

4.1 标量数据类型(简单数据类型)

4.1.1 整型

int或者integer,整数,包括正整数,负整数和0

$num = 5; //说num变量的数据类型,其实指的是num变量所指向的值5的数据类型

整型在系统内存中占4个字节保存数据。

 

4.1.2 PHP还支持定义其他进制:八进制和十六进制

八进制:数值以0开始,后面跟八进制序列

$num = 011;    //十进制9

十六进制:数值以0x开始,后面跟十六进制序列

0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

$num = 0x11;    //十进制17

 

4.1.3 浮点型:float,double,精度

通常,float占用4个字节保存数据,单精度,表示7个精度

double占用8个字节保存数据,双精度,表示15个精度

实际上PHP中float也是占用8个字节保存数据

$float = 1.0;        //普通的带小数的浮点数

$float = 2.3e3;        //科学计数法保存的浮点数

因为浮点数会丢失精度,所以通常不用浮点数比较大小。

什么情况下使用浮点型?什么情况下使用整型?

一般对于精度要求不是那么高的,但是数值又非常大的可以使用浮点数,其他情况下基本都不使用。

 

4.1.4 字符串

string,凡是带引号包好的字符都可以称之为字符串

表示方式:

  1. 单引号:将字符串用单引号包裹起来
  2. 双引号:将字符串用双引号包裹起来
  3. 定界符:使用一种特殊的符号(<<<),并且增加一对起始和结束标识来包括字符串
  • 语法:$str = <<< EOD//字符串内容EOD;

定界符使用规则

  • 1.定界符的边界符号必须成对
  • 2.右定界符必须顶格
  • 3.两个定界符后面都不能跟任何其他内容

定界符的意义

  • 1.    为了让双引号对应的字符串在编写的时候方便查看
  • 2.    定界符能够在输出之后保证原来的数据格式

单引号和双引号的区别?

  • 双引号中能够使用更多的转义字符\r\n\t
  • 单引号:\’
  • 双引号:\”\r\n\t
  • 双引号中能够解析PHP变量

双引号解析变量注意

系统无法确定变量名从哪里结束

如何解决?

  • 1.在变量后面增加一个空格
  • 2.将变量用大括号包裹{}

有人认为单引号比双引号的字符串效率要高,因为单引号不需要去解析其中的变量等内容,只要直接输出即可。

 

4.1.5 哪些数据会被当做FALSE处理?

需要通过比较的形式来判断是否为FALSE

  • 0:整型0
  • 0.0:浮点0
  • ‘0’:字符串0
  • null:空
  • ‘’:空字符串

4.2 复合数据类型

数组

4.2.1  什么是数组?

数组就是在内存里有一块连续的内存空间(堆空间),这里面可以保存多个数据,数据没有数据类型的限制。

 

4.2.2  PHP数组与其他语言的数组区别?

  • a)    PHP数组没有长度限制,其他语言C必须事先指定数组长度,如果超出长度,就称之为溢出。
  • b)    PHP数组没有数据类型限制,其他语言C在事先必须声明数组能存储的数据类型。
  • c)    数组的下标可以是数值也可以是字符串。

 

4.2.3 数组基本语法

关键字array

显示数组语法

$arr = array(元素1,元素2,元素3…);    //数据类型一定是数组

隐式数组语法

$arr[] = 元素1;    //定义一个$arr变量,将元素1添加进来

$arr[] = 元素2;    //将元素2添加到$arr变量中

 

4.2.4 访问数组

数组本质是变量,访问的时候就是直接使用变量,但是因为数组元素有多个,而系统没有办法直接区分到底用户是访问的哪一个,所以需要用户在访问数组的时候,使用数组下标(键名)

  • 语法:$数组变量[下标]
  • 数值下标:$arr[数值]
  • 字符串下标:$arr[‘字符串’]

 

4.2.5  数组分类

索引数组:当前数组的下标(键名)全是数字(整型)

定义方式:系统自动分配下标

系统分配所引方式

  • 1.系统是0开始分配下标,依次递增1
  • 2.用户可以手动分配下标(下标不能重复:重复的效果就是覆盖)
  • 3.如果用户在某一处指定了下标,那么后续元素自动分配的下标从前面的最大值(索引)开始

关联数组:当前数组的下标全是字符串(使用最多)

  • 1.下标必须使用引号包含
  • 2.下标不允许重复,重复会覆盖

混合数组:数组的下标既有数字又有字符串

 

4.2.6  数组遍历

将数组里面的所有元素都取出来。

count():对数组长度进行计算,返回数组元素的个数(长度)

for循环遍历数组

要求:

  • 1.    数组必须是索引数组
  • 2.    所以必须是连续的索引
  • 3.    索引必须从0开始

如果数组是一个关联数组,那么就完全不能使用for循环来进行遍历。

PHP提供了一个foreach来实现对数组元素的遍历

语法:foreach(数组 as 键值对$key => $value){

//使用$key当做当前元素的下标

//使用$value当做当前元素的值

}

 

4.2.7 函数遍历数组

数组指针

每个数组都默认有一个指针(定位符),默认指向数组的第一个元素。如果在对数组使用循环遍历,那么该指针会在访问指针当前所指向的元素之后,将自己向下移动一位,指向下一个元素的地址。如果当指针遍历完最后一个元素,指针会继续下移,从而移除数据空间(元素),从而再次对数组元素进行访问的时候,返回FALSE。

each

  1. each():每次从数组中获取当前数组指针所指向的元素,返回一个有四个元素的数组(关联+索引),并且将数组的指针下移一位
  2. each访问数组元素得到关联索引混合数组
  3. each在得不到数据(数组指针指向数组最末,没有元素)的时候返回FALSE
  4. each本身不能重置数组指针,foreach可以重置指针

list使用

list是一个语法结构,将得到的数组里的元素,必须是以0开始的索引元素,对应的赋值给list所指定的变量里。

语法:list($first,$second,$third) = array(‘张无忌’,20,’男’,’乾坤大挪移’);

$first = ‘张无忌’;

$second = 20;

$third = ‘男’;

因为each返回的结果里有两个索引元素0和1,所以一般使用list与each进行配对使用

list搭配each的好处:能够直接将数组的元素取出来,且赋值给变量,而在后续的程序中可以直接使用变量来操作。

 

4.2.8  二维数组

数组的元素的值是一个数组数据类型。

array(

‘person1’ => array(‘name’ => ‘张无忌’,’age’ => 20,’power’ => ‘九阳神功’),

‘person2’ => array(‘name’ => ‘周芷若’,’age’ => 18,’power’ => ‘九阴白骨爪’)

);

 

4.2.9  数组的增删改查(二维数组)

$arr = array();    //新增

$arr[] = ‘泰山’;//新增元素

$arr[0] = ‘衡山’;//修改元素

echo $arr[0];    //查看元素

unset($arr[0]);//删除元素

 

4.2.10 数组相关的函数

  • key:获取当前数组当前指针所指向元素的下标
  • current:获取当前数组指针所指向的元素的值
  • next:返回数组当前指针所指向的下一位的元素的值,并指针下移一位
  • 注意:如果当前指针已经在数组元素的最后一个元素,那么next返回FALSE,指针依然下移一位,移除了数组
  • prev:返回当前指针所在位置的前一个元素的值,并且将指针向前移动一位
  • 注意:如果当前指针已经在数组元素的第一个元素,那么使用Prev将会将数组的指针移除数组,返回FALSE
  • 如果指针一旦移除数组,那么都不能通过prev或者next将指针拉回来。
  • end :获取数组元素最后一个元素的值,指针也会指向最后一个元素
  • 注意:end函数与Reset函数有异曲同工之妙,也能把移除数组的指针给重置回来
  • reset:重置数组的指针,让数组指针指向第一个元素,如果成功返回第一个元素的值,失败返回FALSE
  • 注意:如果数组第一个元素被删除,那么指针重置之后,是第二个元素(从第一个有效元素开始)
  • array_keys:获取数组的所有下标,返回一个索引数组,数组元素的值都是目标数组的下标
  • array_values:获取数组所有的值,返回一个索引数组

 

4.2.11 数据结构模拟函数

栈:先进后出,压栈(把数据加入到栈里),出栈(把栈里的数据弹出来)

队列:先进先出,入队(从数组尾端插入数据),出队(把数组的元素,从头部出来)

以下四个函数

1.    都是对原数组进行操作。

2.    都会重置数组里面的索引。

  • array_push:从数组的尾端加入一个元素(压栈)
  • array_pop:从数组的尾端弹出一个元素(出栈)
  • array_shift:从数组头部将数组元素移出
  • array_unshift:从数组的头部插入数据

 

4.2.12  数组与字符串之间的转换

  • explode:将字符串按照指定的分隔符分解成一系列小的字符串,都成为数组的一个元素
  • implode:将一个数组里的所有的元素按照某个分隔符进行拼接,变成一个字符串

range:按照ASCII码能够指定范围,自动生成数组元素的函数

//CAPTCHA:验证码,制作验证码随机字符串

array_rand:从数组中随机取出指定长度的个数的元素下标

shuffle:将原来的数组里的元素打乱

 

4.2.13 数组合并:+和array_merge()

+:保存第一个数组的所有元素,如果后面的数组的元素与前面数组的元素的下标相同,那么就忽略,如果不同则加到第一个数组里,最终返回一个数组

array_merge():先保留第一个数组的所有元素,如果后面数组的元素与前面数组的元素关联下标相同则用后面数组的元素覆盖前面的;如果是索引下标,直接添加到第一个数组后面,重置索引。

 

4.2.14 数组的比较

==和===

  • ==:要求数组长度一致,数组元素的值相等,下标也要相等
  • ===:数组长度一致,值和类型都完全一致,出现的顺序必须也相同

对象


4.3 特殊数据类型

  • NULL:定义的变量的值为NULL或者变量被删除
  • 资源:所有外部数据的操作全部称之为资源类型数据

如PHP操作数据库中,mysql_connect连接成功返回的一个结果称之为资源(连接资源)

 

4.3.1 数据类型转换

自动转换

自动转换:系统根据操作所需要的类型将变量的值进行对应类型的转换

自动转换都是系统本身所做的事情,不需要用户去干预。

自动转换:字符串转数值

  • 1.    字符串只有以数值或者小数点开始的时候,系统才会有可能将字符串进行数值转换,要不然直接转换成0
  • 2.    只读取前面连续的数值,没有字母或者其他特殊字符
  • 3.    只读取一个小数点
  • 4.    如果有小数点最终保留,那么数据类型变成浮点型,否则是整型

强制转换

强制转换:我们根据具体的需求,将变量的值事先转换成所需的数据类型

  • int,integer:整型,将数据转换成整型
  • bool,Boolean:将数据值转换成布尔型
  • float:转换成浮点型
  • string:转换成字符型
  • array:转换成数组类型
  • object:转换成对象类型

语法:(数据类型)变量

查看数据类型的方式

  • 1.    var_dump把变量的类型及长度还有数据值都输出
  • 2.    通过函数gettype函数,获得数据的类型,返回一个字符串

设置数据类型:settype($var,’类型’) 《========》(类型)$var

判断数据类型

PHP提供了一些列函数来判断数据的类型。函数都是以is_开头,后面跟数据类型。

如果是目标类型则返回TRUE,否则返回FALSE

类型

  1. is_bool
  2. is_float
  3. is_integer
  4. is_object
  5. is_array
  6. is_string
  7. is_resource
  8. is_scalar:判断一个变量的值是否是标量类型
  9. is_null
  10. is_numeric:检测变量是否为数字或数字字符串
  11. is_string
  12. is_resource
  13. is_scalar:判断一个变量的值是否是标量类型
  14. is_numeric:检测变量是否为数字或数字字符串

5 运算符

5.1 算术运算符

算术运算符:+,-,*,/,%

 

5.2 赋值运算符

赋值运算符:=,+=,-=,*=,/=,%=,.=

.=:将左边的变量与右边的变量连接起来,赋值给左边的变量

变量类型是整数型时,会自动将整型转换成字符串再进行拼接

 

5.3 逻辑运算符

  • &&:and左边和右边的条件必须同时为真,结果为真
  • ||:or左边和右边的条件,只要一个为真,结果为真
  • !:对条件结果本身取反,条件为真则结果为假,条件为假则结果为真

 

5.4 比较运算符

比较运算符:>,>=,<,<=,==,!=,===,!==

如果两个比较的结果满足条件,那么返回真,否则返回假

===:两个变量的类型和值都相同才为真

 

5.5 错误抑制符

抑制错误,不让错误出现

错误抑制符:@

 

5.6 三元运算符

参与运算的表达式有三个

语法:表达式1 ? 表达式2 : 表达式3

如果表达式1为真,那么计算表达式2,否则计算表达式3

 

5.7 自操作运算符

自操作运算符:++,--

++:分为前置++和后置++,$a = $a + 1

前置++:++$a,

后置++:$a++

 

5.8 字符串运算符

连接字符串

字符串运算符:.和.=

$a = ‘hello ’;

$b = ‘world’;

.:表示两个字符串连接,不会改变原来的变量本身

$c = $a . $b;

.=:将两个字符串连接起来后再赋值给左边的变量

$a .= $b <===========> $a = $a . $b;

 

5.9 位运算符

针对系统硬盘上存储的位进行操作(实际操作是以字节为单位),位运算在计算过程中,每个位的操作返回的结果都是1或者0

 

5.10 位运算符

  • &:按位与,表示两个位都为1时,则返回1,否则返回0
  • |:按位或,表示两个有一个为1的时候,返回1,否则返回0
  • ~:按位非,如果本身为0,则返回1,如果本身为1,则返回0
  • ^:按位异或,如果两位不相同时,则返回1,如果两位相同则返回0
  • >>:按位右移,将整个字节向右移一位,左边空出来的使用0补充
  • <<:按位左移,将整个字节向左移一位,右边空出来的使用0补充

6 脚本执行

PHP脚本执行结束后内存是如何处理的?

6.1 什么叫做PHP脚本执行结束?

指的是当PHP引擎将用户请求的某个PHP脚本文件(index.php)的最后一行PHP代码执行完毕,称之为脚本执行结束。

 

6.2 脚本结束后内存如何处理?

PHP脚本所占用的所有内存都会被释放,被操作系统回收。

注意:

1.标签可以没有结束符号,如果在PHP代码之后没有任何其他非PHP代码,那么该结束标签可以没有

有结束标签:如果在结束标签之后还有额外的空格或者空行,PHP在解析的时候,会将该空格当做html的空格或者空行输出,会浪费带宽

如果PHP是嵌入到html代码中,那么建议最好使用结束标签,最后一个PHP结束标签可以没有(后面没有其他代码)

一般情况下,可以没有结束标签

2.PHP语句结束符:英文分号“;”

如果有PHP结束标签,那么最后一行PHP代码,可以没有语句结束符分号。

如果没有结束标签,那么不论哪一行代码都必须使用语句结束符

 

6.3 终止脚本执行

终止脚本执行,指的是通过一条语句告诉PHP引擎,此语句之后的其他语句不需要执行。

PHP提供了三种方式来终止脚本执行:return,die,exit

return:执行到该处退出,如果是在函数中,表示退出函数,如果是在脚本中,表示脚本停止执行

函数的return是返回函数调用的地方,脚本的return是返回给脚本被包含的地方。


7  流程控制

7.1 分支结构

7.1.1 if分支语法:

最简if

if(条件){

//只要满足条件(条件为TRUE),那么执行语句块

//要执行的PHP代码

//如果不满足,则不执行if内部的语句块

 

标准if

if(条件){

//如果条件为TRUE,那么执行语句块1,不会执行语句块2

//语句块1

}else{

//如果条件为FALSE,那么执行语句块2,不会执行语句库1

//语句库2

}

 

复杂if:有多个else和if的嵌套

if(条件1){

//语句块1

}elseif(条件2){

//语句块2

}elseif(条件3){

//语句块3

}

……

else if和elseif的区别

elseif只有PHP支持

 

7.1.2 switch分支

语法

switch(条件变量){

case 值1:   //条件变量 == 值1

//语句块

break;//跳出当前分支,不再进行条件判断

case 值2:

。。。。

default:

//如果没有满足任何条件的语句

}

 

7.2 循环结构

7.2.1 for循环:已知初始化条件,范围

for(条件初始化;条件范围(判断);条件变化){

//循环体

//循环控制:continue,break

}

 

for循环可以没有条件

for(;;){

//循环体

//循环控制

}

for循环中往往在第一个条件里,可以写多个表达式,表达式之间用逗号分割。

 

7.2.2 foreach循环

遍历数组,从数组中获取一个元素,将元素的值和下标(键)都分别赋值给某个指定的变量,从而通过对变量的访问实现访问某个数组元素的值。

 

7.2.3 while循环

只判断循环条件,循环条件的变更是在循环体内的循环。

while(循环条件){

//循环体

//循环条件的变更

}

7.2.4 do-while循环

跟while循环是相似的,while循环是先判断条件后执行循环体,do-while不论如何会先执行一次循环体,然后再判断条件。

do{

//循环体

//循环条件变更

}while(条件)


8 PHP函数

种类

8.1 系统函数(直接调用)

8.1.1 字符串函数

strlen:获取字符串的长度,获取的是字符串的字节长度

字符:一个完整的符号,a,中

字节:由8位组成

一个字符最少等于一个字节:ASCII码,a,b,通常英文字符都是占用一个字节

中文在gbk或者gb2312编码里,占用两个字节

中文在utf-8里最少占用3个字节,有可能是4个字节

  • substr:截取字符串,以字节为单位截取
  • string substr (目标字符串 , 截取起始位置 [, 截取长度] ),如果没有截取长度,则默认截取到最后。字符串的起始位置从0开始,第一个字符是0。
  • strtolower:将字符串变成小写
  • strtoupper:将字符串变成大写
  • ucfirst:将字符串首字母大写
  • strrev:将字符串反过来
  • strpos:获取字符串中某个字符首次出现的位置
  • strrpos:获取字符串中某个字符最后一次出现的位置
  • 一般strpos和strrpos是与substr函数搭配使用
  • strchr:是strstr函数别名,查找某个字符在字符串中首次出现的位置,并返回该位置到字符串最后的整个字符串
  • strrchr(获取文件后缀名)
  • trim:去除一个字符串两遍的(最外边)的空格(或者其他字符)

 

8.1.2 时间函数

PHP中时间通常用整型存储

time:得到当前时间的时间戳,是一个整型数据

时间戳

从1970年到当前时间的秒数称之为时间戳(格林威治时间)

PHP提供了一个函数:time()获得时间戳

PHP用来保存时间都是使用时间戳来处理,date函数可以将时间戳转化成时间

date:将指定的时间戳,按照指定的字符串格式进行输出。输出的格式化有固定的参数

  • string date ( string $format [, int $timestamp ] ),$format是一个包含可以识别参数的字符串,第二个参数是一个整型的时间戳,如果没有提供则默认是当前时间的时间戳。
  • strtotime:将一个字符串格式时间(美国可以识别的英文字符串)转化成时间戳
  • microtime:微秒,返回一个微秒的字符串,或者返回一个浮点数毫秒

 

8.1.3 数学相关函数

  • abs:获取数值的绝对值
  • floor:向下取整
  • ceil:向上取整
  • round:四舍五入
  • rand:随机取得指定范围或者0到整型最大值之间的数
  • mt_rand:随机取得指定范围或者0到整型最大值之间的数,比rand效率高

 

8.2 自定义函数

8.2.1 函数语法:

function 函数名(参数列表){

//函数体

//返回值

}

 

8.2.2 调用函数

调用自定义函数与调用系统函数的方式一样

变量 = 函数名(参数列表);//如果函数有返回值,则可以使用变量接收函数的返回值,如果没有,则接收不到

 

8.2.3 函数名

跟变量的命名基本一致。

一般函数命名使用驼峰法和下划线方式

函数名字不能与已有关键字重复

函数名字是不区分大小写的,函数名字不能重复

函数不一定是在声明之后才能调用。

 

8.2.4  参数列表(形参)

在声明函数的时候,为函数指定的参数,参数可以是多个,函数声明的时候的参数称之为形式参数(形参)

形参是没有值的。

如果函数声明时有形式参数,那么在调用该函数时必须传入对应的参数列表(PHP中可以多但是不能少)

函数在声明的时候,参数是形式参数,没有值

在调用函数的时候,穿进去的参数称之为实际参数,实际参数不参与函数内部函数体的运作。

实际参数会将自己的值复制一份,然后将复制的值赋值给形式参数

 

8.2.5 参数传递方式

值传递:将实际参数复制一份,把复制的值赋值给形式参数

引用传递:将实际参数的所以内存的地址,赋值给形式参数

引用传递需要在定义函数的时候,在形式参数前面加上一个地址符号:&

传入的值必须是变量,而不能是具体的值

返回值:函数需要给外部传递的信息

语法:return 值

 

8.2.6 作用域

全局作用域:只能在函数外部使用

全局作用域是指的在函数外部定义的变量

局部作用域:只能在函数内部使用

局部作用域指的是在函数内部定义的变量

可以在局部作用域中使用$GLOBALS[‘全局作用域变量’]来访问全局作用域

注意:$GLOBALS就是指代全局作用域本身的变量

PHP还提供了一个关键字:global

global是将全局作用域的变量的地址,进行复制,然后在局部作用域内新建一个同名的变量名,将外部的地址赋值给局部变量。

语法:global 变量名;

变量名 = 值;

 

8.2.7 函数默认值

在定义函数的时候,给形式参数增加一个默认的值

function myfunc($i = 100){//函数体}

注意:默认值并不是在定义阶段就直接给形参赋值,是在调用函数的时候,如果对应的位置没有传入实际参数,那么系统会去函数空间(代码区)找到该参数定义时给定的默认值来当做形式参数的值(给形参赋值)

如果一个函数存在默认值,那么这个默认值所对应的形式参数就必须在形参列表的最后面

function myfunc($name = ‘张三’,$age){//函数体}   //该形式是错误的,默认值必须在形参列表最后

function myfunc($age,$name= ‘张三’){//函数体}    //正确

 

8.2.8 匿名函数

定义:变量 = function(参数列表){//函数体};

使用:变量(参数列表);

1.没有名字的函数如何定义?

函数的定义在编辑阶段,会被系统存放到代码区,会有一个内存地址。需要通过变量来保存函数的内存地址。

匿名函数语法如下:

变量名 = function(参数列表){//函数体} ;

2.没有名字的函数如何调用?

调用函数必须有括号。函数的调用实际是在栈里开辟内存空间,把函数体给加载进来,逐行执行。

2.1    通过变量保存的函数的内存地址,来讲函数给取出放到栈里

2.2    告诉系统该取出来的数据是一个函数,系统需要当做函数来处理,增加一个括号。

匿名函数的作用?

1.    是一种允许的语法结构

2.    一般是用于函数的参数

 

8.2.9 伪类型

  • mixed:混合,不确定类型
  • number:数值
  • callback:回调函数,在调用函数的时候,必须传入一个函数对应的名字
  • function myfunc(callback $func){//函数体} //表示参数func是一个外部函数的函数名字
  • function test(){//函数体}        //在调用myfunc之前,需要事先定义一个函数
  • myfunc(‘test’);
  • void:表示空,在函数的参数或者返回值上,如果是参数表示该函数没有参数,如果是返回值,表示该函数没有返回值。

 

8.2.10 可变函数

可变变量:将一个变量的值当做另外一个变量的名字,从而去的另外一个变量的值$$变量名

可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号(),让系统认为该值是一个函数,从而当做函数来执行。

语法:

//定义一个函数

function display(){

//函数体

}

//定义一个变量,其值刚好是函数的名字

$var = ‘display’;

//可变函数

$var();

你可能感兴趣的:(PHP)