3.1 初识函数
3.1.1 函数的定义
语法:
function 函数名([参数1,参数2,......]) { 函数体 }
(1)function:在声明函数时必须使用的关键字
(2)函数名:创建函数的名称,是有效的PHP标识符
①函数名是唯一的,不能重复定义;
②由字母、数字、下划线组成,必须以英文字母或者下划线开头;
③函数名不区分大小写,常量和变量区分大小写;
④采用骆驼命名法,第一个单词首字母小写,后续单词首字母大写;(建议)
⑤获取数据以get开头,设置数据以set开头,删除数据以del开头;(建议)
(3)[参数1,参数2......]:外界传递给函数的值,可选。当有多个参数时,各参数用“,”隔开。
①形参
a.定义时候,设置形参参数列表,在函数调用时,将相应的参数传递到函数内部进行加工给处理。
②默认值
a.参数较多的情况下,参数值比较固定时,某个参数的值可能不变,可以设置默认值。 function fun($para1,$para2=3) { } //$para2为默认阐述
b.调用时,没有为有默认值的参数传递参数,则自动使用默认值。设置了形参默认值,同样可以在调用时传递实参。
c.有默认值的形参,该参数尽量靠后设置。
d.默认值不可以是变量。
③实参
a.调用时将数据传递给对应的形参。实参可以是具体的值,也可以为变量。要与形参的个数一致。
(4)函数体:函数定义的主体,专门用以实现特定的功能
3.1.2 函数的调用
遵循先声明后调用原则。实际上,调用的位置可以在声明位置之前,不违背先声明后调用原则。PHP执行的第一阶段为预编译,将函数代码存放在内存的代码区,执行阶段,使用函数名字调用函数。
语法:
函数名([参数1,参数2...])
3.1.3 函数的返回值
在调用一个函数后,能得到处理结果,这个结果就是函数返回值。在PHP函数中,使用return语句可以将返回值传递给调用者。
return功能:
①将数据返回到调用的地方,调用函数的位置要接收,否则返回值无意义;
②结束函数的执行,return后面的语句不执行,最多可以执行一个return语句;
③return语句不能一次性返回多个值,但可以通过一个返回一个数组来是实现;
④尽量使用return语句返回信息,而不是直接输出;
3.2 函数的高级应用
3.2.1 函数中变量的作用域
变量需要先定义才能使用,但并不意味着变量定义后就可以随时使用。变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。在函数中定义的变量称为局部变量,在函数外定义的变量称为全局变量。函数外部定义的变量,在函数内部无法使用;函数内部定义的变量,函数外部无法使用。
示例:
<?php $name='欧阳华夏'; //定义函数 function getName(){ echo $name; } //调用函数 getName();//报错:Notice:Undefined variable:name in F:\Site\site2\index.php on line 10 在函数内部name的值为 ?>
从上述示例代码看出,程序提示变量$name未定义,$name的值也没有输出。说明在这种情况下,函数内部不能使用定义在函数外部的变量,
如果希望在函数内部使用函数外面的变量,需要在函数内部使用关键字 global 修饰变量。如下:
<?php $name='欧阳华夏'; //定义函数 function getName(){ global $name; echo $name; } //调用函数 getName();//输出结果是欧阳华夏 ?>
由此可见,使用关键字 global 可以手动的将函数中使用的变量变为全局变量。
局部作用域与全局作用域的关系:
全局作用域与局部作用域没有交集,不同函数的作用域,也没有交集。
超全局变量(预定义全局变量)$GLOBALS
如何在局部作用域使用全局变量或者在全局作用域使用局部变量?
$GLOBALS是一个包含了全部变量的全局组合数组,变量的名称就是数组的键。
$GLOBALS专门用来实现数据的超全局化的超全局变量。作用是引用全局作用域中的全部全局变量。
代码如下:
<?php $name='欧阳华夏'; //定义函数 function getName(){ //使用$GLOBALS访问全局变量 echo "在函数内部name的值为:" . $GLOBALS["name"]; } //调用函数 getName();//输出结果---->在函数内部name的值为:欧阳华夏 ?>
注意:
①创建一个全局变量,系统会自动在$GLOBALS中创建变量名为下表的元素;
②在$GLOBALS中添加元素,自动创建相应名字的全局变量;
③删除或修改$GLOBALS数组的元素,会导致全局变量同步删除或修改;
3.2.2 可变函数
PHP支持可变函数的概念,即一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行它。
代码:
<?php function test(){ echo "可变函数的本真函数"; } //定义变量,将上述函数赋值给该函数 $var="test"; $var();//结果是:可变函数的本真函数 ?>
注意:在变成过程中,尽量少用或者不用可变函数。
3.3 字符串相关函数
3.3.1 常见的字符串定义语法
单引号:
①不解析变量
②单引号中包括单引号需要转义
③单引号中可以包括双引号
双引号:
①可以解析变量
②变量最好使用变量{}边界符号
③单引号与双引号嵌套问题:只有最外层是双引号时,才能解析变量
heredoc字符串定义结构
单引号和双引号,在多行字符串、复杂字符串如JS代码的定义时显得不便
语法:
$str = <<<heredoc标记名 字符串内容 heredoc标记名;
注意事项:
- 以<<<开头,其后跟着自定义的标识符。命名遵循PHP标识符命名规范;
- 在换行的位置,开始字符串的书写;
- 字符串书写完成后,换行输入原先自定义的标识符。标识符必须为本行第一列;
- 两处的标识符必须一致;
- 可以解析变量。单引号和双引号不需要转义或者处理。一般用于保存较长字符串或者JS代码;
3.3.2 字符串的长度问题
单字节字符串的字节数(等于字符串)----------strlen();
<?php //strlen(字符串) $length=strlen("welcome to China"); echo $length;//结果是:16 ?>
多字节字符串的字节数(一个汉字占三个字节)----------mb_strlen();
/* PHP提供多字节字符串扩展模