PHP函数和数组

时间:2022-02-02 18:17:19

所有代码可以在https://www.github.com/lozybean/learn_www中查看

PHP函数

PHP中还是有很多函数式编程的影子,函数功能还是比较强大的。

1. 函数用function 关键字申明,函数名称大小写不明感,而且不支持函数重载,每个函数都有一个特定的名字,不能重名,用return关键字返回值;

2. 函数的调用可以出现在申明之前或者之后,只要在php脚本可见范围内都可以调用,通过一对小括号调用函数;在没有调用时,函数可以以函数名的字符串传递,如讲foo函数保存到$bar中:$bar=“foo”,通过$bar()即可调用foo函数;

3. PHP中使用全局变量需要通过关键字:global显式地申明,或者使用$GLOBALS数组调用全局变量,如果没有申明,则只有局部变量生效;

4. 局部变量在某一段代码体中生效,出了该代码体就自动销毁;

5. 通过static关键字申明一个静态变量,静态变量在代码体执行完成后不会释放,而是保存在静态内容中;

6. PHP中函数的参数可以有很多的形式:

    常规参数:指定每一个参数的类型,以及返回值的类型,和c语言中的函数申明类似,这种声明方式比较少使用,因为不灵活,在一些非常严格的条件下可以使用;

    伪类型参数:在常规参数基础上,使用伪类型,使得函数申明变得灵活一些;

    引用参数:在参数名之前加&符号表示使用该参数的引用,和perl语言中类似,在函数中对该参数的修改会体现到外部数据上;

    默认参数:可以给参数设置默认值;

    可变个数参数:使用func_get_args()函数获取传递的参数数组,类似于perl中的@_;

    大多使用PHP的函数都不需要显式声明类型,以及返回类型,而交给解释器完成;

7. 回调函数,即以一个函数作为参数的函数

    由于函数可以以函数名的字符串的方式,传递给变量,以完成延迟调用的目的,所以可以使用一个保存了函数名称的变量来作为函数的参数,实现函数中调用其他函数;

    另外一种方式是使用内置函数:call_user_func_array()来调用其他函数,其本身就是一个回调函数,该函数接受两个参数,第一个是调用的函数名称,第二个是对应的参数数组;

    call_user_func_array()还可以用来调用静态方法或者的对象的方法,只需要将第一个传入的参数改为一个数组,数组中包含方法所在的对象,以及方法名,如call_user_func_array( array(“Foo”,“func”), $args ),其中$args为参数数组,表示调用类Foo的静态方法func;call_user_func_array( array(new Foo(), “func”),$args )表示调用Foo对象的方法func,这里的对象可以用已经实例化或者直接用new实例化;

8. 递归函数,即在函数中不断调用自身的函数,应该尽量避免递归函数的使用,而使用更加优秀的尾递归函数;

9. 使用include()、require()载入外部文件,include在每次载入时都会进行读取和评估,而require只会执行一次。include_once()、require_once()可以避免同一个文件被多次载入,确保每个文件只载入一次。

PHP数组

PHP的数组比较灵活,由于结合了字典和列表的特点,可以通过数组的嵌套,来实现各种数据结构。

1. 使用array($key1=>$value1,$key2=>$value2,$keyN=>$valueN)的形式申明的数组,以给出的键值对作为索引;

    使用array($value1,$value2,$valueN)的形式声明的数组,索引为默认的从0开始的递增整数;

    上述两种方式可以混合使用,在混合申明时,默认索引优先,并且支持非连续,默认的索引在已给出最大的整数基础上增加1,并且如果索引重复赋值,会产生覆盖:

PHP函数和数组

PHP函数和数组

2. 数组的遍历,除了使用for、while之外,PHP4还支持foreach(为什么在基础语法中没有讲),for语句只适用于默认索引值数组,foreach则可以对数组的真实元素进行遍历 :

    foreach(array_expression as $value) 或者 foreach(array_expression as $key=>$value)

    多为数组的遍历还是简答的循环嵌套;

3. each()函数:传入一个数组作为参数,每次调用时读取数组中的一个元素,返回一个四元素数组,其中0,key下标对应键,1,value对应值;

    list()函数:list()函数将数组中的值取出并赋值给若干变量,只支持默认索引的数组;

    while中使用each()函数,可以有效实现数组遍历:

    while ( list($key,$value) = each($contact2) ) {
        echo "<p>$key=>$value</p>";
    }

4. 数组中的内部指针:current()取得目前指针所指向位置的内容资料;key()取得目前指针的索引;next()指向下一个单元;prev()指向上一个单元;end()指向最后一个元素;reset()指向第一个元素;

5. 预定义数组:预定义数组变量包含了来自Web服务器、客户端、运行环境和用户输入的数据,不需要使用global就可以生效并且访问,在每一个PHP脚本中都默认存在,对于Web操作非常重要:

PHP函数和数组

这里比较重要,要在以后的学习中不断强化了。

6. 数组中的内建函数:

    array_values():返回指定数组的值的数组;

    array_keys():返回指定数组的索引的数组;

    in_array():接收三个参数,其中前两个为必须参数,第一个参数指定在数组中搜索的值,第二个参数指定被搜索的数组,第三个参数是个布尔值,如果为真,则会检查类型是否相同,如果为假,则不检查类型。in_array()函数大小写敏感。

    array_flip():交换数组中的键值,如果一个值多次出现,则会产出覆盖;

    array_reverse():接收两个参数,第一个参数为必须,指定一个数组,第二个参数为布尔值,为真时,翻转指定数组并且保留键名,为假时,键名丢失。

9. 数组统计函数:

    count():计算数组中的元素数目;

    array_count_values():统计数组中的每个值出现的次数;

    array_unique():删除数组中重复的值,保留的键名为排序后的第一个键;

10. 数组相关回调函数:

    array_filter():传入两个参数,第一个数组,第二个过滤函数,该函数将数组中的值依次传入过滤函数中,如果返回为true则保留;

    array_walk():传入三个参数,第一个为数组,第二个为函数,该函数至少接收两个参数,分别为数组的键和值,也可以接收第三个参数,即array_walk()的第三个参数;

    array_map():传入两个参数,第一个为函数,第二个为数组,返回该数组经过第一个参数函数处理后的数组,和python的map()类似;

11. 数组的排序函数:

    PHP函数和数组

12. 数组操作:array_slice()、array_splice()、array_combine()、array_merge()、array_intersect()、array_diff(),分别表示切片、合并键值、并集、交集、差异;

13. 数据结构实现:(额。。。书上的标题名字有点大了)其实就是通过array_pop()、array_push()、array_shift()、array_unshift()操作数组;

14. 其他函数

    array_rand():从第一个参数数组中随机选出第二个参数指定的元素个数返回;

    shuffle():随机排列一个数组;

    array_sum():求数组值的总和;

    range():和python中range()类似,支持两步:(b,e),三步:(b,e,s)等方式,返回给定范围的数组。