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 ...
随机推荐
- [PHP基础]有关isset empty 函数的面试题
用isset()和empty()判断下面的变量. $str = ''; $int = 0 ; $arr = array(); isset($str) 返回的是 true 还是 false empty( ...
- PHP 算法
1.首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半. 思路:多少行for一次,然后在里面空格和星号for一次. ? 1 2 3 4 5 6 <?php for($i=0 ...
- [设计模式]PHP设计模式之单例模式
面试最常见的问题之一就是 请问您知道哪些设计模式这次先介绍最经典的单例模式.单例模式分3种:懒汉式单例.饿汉式单例.登记式单例.单例模式有以下3个特点:1.只能有一个实例.2.必须自行创建这个实例. ...
- Shell编程进阶篇(完结)
1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或 ...
- UWP 重启App
今天看见了阿迪王的博客,写到了重启App自身的代码,微软终于在16299加进来了 其实就加上一句话 await CoreApplication.RequestRestartAsync(string.E ...
- UWP 应用程序内购
今天来说一下应用程序内购的问题,这里面有坑,给自己做个笔记,也给需要的人提个醒. 我目前的需要是可以允许用户捐赠赞助App的形式内购,最终效果如下 只讲上面的列表部分,下面的就是图片布局啥的,没意思了 ...
- Shuttle ESB(一)——入门实例
下载Shuttle ESB 从GitHub项目公布页,下载最新的公布版本号. Shuttle-ESB源代码包列表:http://www.nuget.org/packages?q=shuttle-esb ...
- php&&页面静态化
页面静态化.主要是出于两个方面的考虑. 第一:訪问html页面的速度比訪问php页面的速度快.在訪问php页面时候.须要对php进行解析.訪问html时候,直接浏览器能够解析出来.特别是PV量 ...
- char a[] = "ab\0123\098"; 求a的长度
原因: \0表示后面的字符是八进制(\ddd); 8进制=10进制( 10是'\n' 的ASCII码): 当\0后面有数字,且数字范围在0~7之间时,为8进制转义.如'\012': 当\0后面没有 ...
- chrome解决http自动跳转https问题
1.地址栏输入: chrome://net-internals/#hsts 2.找到底部Delete domain security policies一栏,输入想处理的域名,点击delete. 3.搞 ...