所有代码可以在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,并且如果索引重复赋值,会产生覆盖:

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操作非常重要:

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

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. 数组的排序函数:

    

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)等方式,返回给定范围的数组。

PHP函数和数组的更多相关文章

  1. C++基础——函数指针 函数指针数组

    ==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...

  2. typedef 函数指针 数组 std::function

    1.整型指针 typedef int* PINT;或typedef int *PINT; 2.结构体 typedef struct { double data;}DATA,  *PDATA;  //D ...

  3. C++程序设计(关于函数中数组传递的一点心得)

    题目: 10个学生考完期末考试评卷完成后,老师需要划出及格线,要求如下: (1) 及格线是10的倍数: (2) 保证至少有60%的学生及格: (3) 如果所有的学生都高于60分,则及格线为60分:   ...

  4. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  5. PHP中使用数组指针函数操作数组示例

    数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...

  6. C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

    #include<stdio.h> #include<stdlib.h> #include<windows.h> /* 举列子说明什么是函数指针 */ //以一个加 ...

  7. C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子

    先来不带参数的回调函数例子 #include <iostream> #include <windows.h> void printFunc() { std::cout<& ...

  8. c语言函数传递数组

    1.传递数组,打印不出来 #include <stdio.h> void solve() { printf(]); } int main() { int i; ;i<n;i++) { ...

  9. Linux C 程序 函数,数组,指针,gdb调试器(SEVEN)

    函数,数组,指针,gdb调试器 1.函数定义 如果明确指定返回类型,默认为int 参数传递:实参对形参的参数传递是单向的,实参只是把自己的值赋给形参.                      形参的 ...

  10. PHP函数积累总结(Math函数、字符串函数、数组函数)

    Math函数:10个较常用标红.abs — 绝对值acos — 反余弦acosh — 反双曲余弦asin — 反正弦asinh — 反双曲正弦atan2 — 两个参数的反正切atan — 反正切ata ...

随机推荐

  1. Linux 配置Jenkins

    一.安装包下载: 1. jdk-8u152-linux-x64.tar.gz下载: wget http://download.oracle.com/otn-pub/java/jdk/8u152-b16 ...

  2. 项目实战11—企业级nosql数据库应用与实战-redis的主从和集群

    企业级nosql数据库应用与实战-redis 环境背景:随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放.抢红包 ...

  3. Redis在centos6.4上的最详细图文安装教程

    准备工作:一个redis3.0.0的安装包,没有可以点击下面的链接下载 https://pan.baidu.com/s/1kU5Ez2J 工具 安装环境   centos6.4 好了开始进入正题 输入 ...

  4. YiShop_最全微信营销涨粉技巧

    在我们开始推广企业订阅号之前,我们必须思考微信营销策略,客户通过微信可以获得什么?企业通过微信可以得到什么?微分销专家建议企业微信定位为互动.服务工具,因为获取一个粉丝很难,可是失去一个粉丝,却是一件 ...

  5. VSCode配置eslint

    在Vue.js项目中,使用的是eslint检查. 而在我写完代码后,cnpm run dev运行命令...然后悲剧了,一大堆报错!╮(╯▽╰)╭ 安装插件:Vetur:这是vscode上一个vue.j ...

  6. 实践作业3:白盒测试----我是如何写测试用例DAY6

    一开始接到写白盒测试的任务,我感觉挺难的,因为感觉之前我所想到的都是黑盒测试啊,说到测试系统逻辑,感觉就有些神秘的样子没有思路了,那黑盒和白盒写的到底有啥区别.后来我请教了实验室的一个同学,他虽然还没 ...

  7. 增加tomcat的缓存

    起因是我做了一个批量压缩图片的功能,在服务器上跑这个功能的时候,发现服务器有警告.警告的内容大概如下.  XX....  to the cache because there was insuffic ...

  8. BeautifulSoup 抓取网站url

    1 # -*- coding:utf-8 -*- 2 import urlparse 3 import urllib2 4 from bs4 import BeautifulSoup 5 6 url ...

  9. layui样式修改记录

    记录以免遗忘: .layui-elem-quote{ padding 15 改为 5 }

  10. 商城项目整理(三)JDBC增删改查

    商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: create table TEST.GOODS_TABLE ( gid NUMBER not null ...