PHP函数和数组
所有代码可以在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函数和数组的更多相关文章
- C++基础——函数指针 函数指针数组
==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...
- typedef 函数指针 数组 std::function
1.整型指针 typedef int* PINT;或typedef int *PINT; 2.结构体 typedef struct { double data;}DATA, *PDATA; //D ...
- C++程序设计(关于函数中数组传递的一点心得)
题目: 10个学生考完期末考试评卷完成后,老师需要划出及格线,要求如下: (1) 及格线是10的倍数: (2) 保证至少有60%的学生及格: (3) 如果所有的学生都高于60分,则及格线为60分: ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- PHP中使用数组指针函数操作数组示例
数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
#include<stdio.h> #include<stdlib.h> #include<windows.h> /* 举列子说明什么是函数指针 */ //以一个加 ...
- C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
先来不带参数的回调函数例子 #include <iostream> #include <windows.h> void printFunc() { std::cout<& ...
- c语言函数传递数组
1.传递数组,打印不出来 #include <stdio.h> void solve() { printf(]); } int main() { int i; ;i<n;i++) { ...
- Linux C 程序 函数,数组,指针,gdb调试器(SEVEN)
函数,数组,指针,gdb调试器 1.函数定义 如果明确指定返回类型,默认为int 参数传递:实参对形参的参数传递是单向的,实参只是把自己的值赋给形参. 形参的 ...
- PHP函数积累总结(Math函数、字符串函数、数组函数)
Math函数:10个较常用标红.abs — 绝对值acos — 反余弦acosh — 反双曲余弦asin — 反正弦asinh — 反双曲正弦atan2 — 两个参数的反正切atan — 反正切ata ...
随机推荐
- Servlet实践--留言板-v1
功能介绍: 由三个jsp页面组成,在doGet中根据请求URL中的请求参数不同,跳转到不同的页面: 页面1:显示整个留言板列表 页面2:创建留言页面(包括用户.主题.内容和上传文件) 页面3:在查看单 ...
- iOS中常见的锁
多线程的安全隐患 一块资源可能会被多个线程共享,也就是说多个线程可能会访问同一块资源. 比如多个线程同时操作同一个对象,同一个变量. 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题. 比 ...
- linux系统下安装配置解压版的MySQL数据库
一.解压文件到当前目录 命令:tar -zxvf mysql....tar.gz 二.移动解压完成的文件夹到目标目录并更名mysql 命令:mv mysql-版本号 /usr/local/mysql ...
- node.js第二天之模块
一.模块的定义 1.在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. 2.狭义的说,每一个JavaScript文件都是一个 ...
- php中trait
1.简介 自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait. Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.Trait 为了减少单继承语言的限制,使 ...
- Android测试:Fundamentals of Testing
原文地址:https://developer.android.com/training/testing/fundamentals.html 用户在不同的级别上与你的应用产生交互.从按下按钮到将信息下载 ...
- C语言可变參函数的实现
1 C语言中函数调用的原理 函数是大多数编程语言都实现的编程要素.调用函数的实现原理就是:运行跳转+參数传递.对于运行跳转,全部的CPU都直接提供跳转指令:对于參数传递,CPU会提供多种方式.最常见的 ...
- Woody的Python学习笔记1
Python 是一种解释性语言:这意味着开发过程中省去了编译这个环节,类似于PHP\Perl. Python 是交互式语言:这意味着你能够在一个python提示符,直接互动运行写你的程序. Pytho ...
- 一个简单的双向链表(C++实现)
直接上代码,亲测有用. #ifndef __DLINK_H__ #define __DLINK_H__ /* [phead] -> [index0] -> [index1] -> [ ...
- Java并发编程实践读书笔记(1)线程安全性和对象的共享
2.线程的安全性 2.1什么是线程安全 在多个线程访问的时候,程序还能"正确",那就是线程安全的. 无状态(可以理解为没有字段的类)的对象一定是线程安全的. 2.2 原子性 典型的 ...