PHP基础入门(二)【PHP函数基础】
PHP基础入门(二)——函数基础
这部分主要讲的就是: 函数的声明与使用、PHP中变量的作用域、静态变量、函数的参数传递、变量函数、回调函数、匿名函数、include&require、PHP闭包
PHP的函数基础↓↓↓
一、函数的声明与使用
1、标识符:程序中的变量名,属性名,方法名,函数名,类名统称为标识符;
① 标识符的命名要求:
只要是标识符,命名就只有字母、数字、下划线组成,开头不能是数字;
② 标识符的命名规范:
类名:要符合"大驼峰法则",每个单词的首字母全部大写!PersonName
其他标识符:符合"小驼峰法则"。首字母小写,之后每个单词的首字母大写。 myNameIsHang
或者使用匈"牙利命名法",所有字母小写,单词之间用下划线分隔。 my_name_is
2、函数名的要求:
① 函数名也是标识符之一。符合标识符的要求与规范。
② 函数名不区分大小写。
③ 函数名不能与已有函数名重复,不能与内置函数名重复。
④ bool类型 function_exists("func") 用于检测函数名是否存在。
二、PHP中变量的作用域
1、局部变量:声明在函数内部的变量,称为局部变量,只能在函数内部使用,如果函数外需要使用,需要return关键字将变量返回。
2、全局变量:声明在函数外面的称为全局变量。
3、注意:PHP中,全局范围不能访问局部变量;局部范围也不能访问全局变量。
如果要在函数中使用全局变量,则需要使用 global关键字将全局变量引入。
函数中如果有变量与全局变量重名,global语句之上,使用局部变量;global语句之下,使用全局变量。
4、GLOBALS[] 全局数组
GLOBALS[] 数组,是PHP内置的全局数组。可以直接给数组添加键和值,无论在函数内wai声明,均可在任何地方使用。
eg:GLOBALS['name']="hanghao";
即,无论在哪里声明,在任何地方都可以使用GLOBALS['name']
5、函数中需要使用全局变量,还有一种方式【函数传参】
可以将全局变量通过函数的参数传入。但是传入的参数是函数的形参,也就是函数内部的局部变量,这个变量与全局变量实际上是两个变量,内部改变,全局变量不会变。
如果,需要在函数内部改变局部变量,可以将形参声明为取址形式
function func($a1,$a2){}
即,函数内修改a1,全局的a1不会改变;函数内修改a2,全局的a2也会改变。
注意:如果函数声明的形参是取址形式,则调用时必须传入变量,而不能是字面量。
例如上面的函数调用: func($a1,$a2); √ func($a1,2); x
因为字面量,不能 中的变量,无法取地址。
6、PHP中,子函数也无法使用父函数中的变量
如果子函数要使用父函数的变量,可以将子函数作为变量函数使用,同时配合use关键字将父函数的变量传入子函数。
function func(){
$a=10;
$func=func() use($a){
echo $a;
}
}
use关键字只能配合变量函数使用,而不能用于function func(){}形式。
三、静态变量
1、使用scatic关键字声明的变量,成为静态变量。scatic $a=10;
2、静态变量的特点:
① 静态变量在函数加载是进行声明。
② 静态变量在函数调用完成后不会被释放。
③ 静态变量在整个脚本执行过程中,只会声明一次,脚本执行完成后,释放变量。
④同一函数,多次调用,共享同一静态变量。
四、函数的参数传递
1、在PHP中如果有参数传递:实参只能比形参多,不能比形参少!!
2、常规参数传递:function func($a){} func(123);
3、引用参数传递:function func(&$a){} func($b);
①通过&传递进来的是实参的地址,所以函数内部改变形参,外部的实参也会变。
②如果形参为引用参数,那么实参必须是变量,而不是字面量。因为字面量没有地址!! func(10); ×
4、默认参数:function func($b,$a=10){} func(20);
是$可以不传,默认为10;$b必须传递,否则使用时未定义报错。
注意:如果参数中默认参数,也有默认参数,则需要把所有的非默认参数放在前面,所有的默认参数放在后面。
5、可变参数列表:由于PHP实参可以比形参多,那么我们可以传递N个实参,并通过PHP内置函数取到对应参数。
var_dump(func_get_args()); 返回数组格式,取到所有实参列表;
var_dump(func_num_args()); 返回实参列表总个数;count(func_num_args());
var_dump(func_get_arg(0)); 传入index,取到第几个参数 func_get_args()[0];
五、变量函数
1、将一个函数名,转为字符串后,赋给一个变量。这个变量,就是我们所说的变量函数,可以加()调用函数内容。
function func(){}
$a="func()"; //$a就是变量函数
$a();
六、自定义回调函数
1、使用变量函数,自定义回调函数
function func($func){$func();}--->function f(){}--->func("f");
2、使用call_user_func_array和call_user_func自定义回调函数;
两个函数的第一个参数,均为回调函数,表示执行当前回调。
不同点在于:call_user_func_array()第二个参数为数组,并将数组的每一个值赋给回调函数的参数列表,相当于JS中的apply();
而call_user_func,是将回调函数的参数列表,直接展开写到第2~多个参数中,相当于JS中的call();
call_user_func_array("func",array(1,2,3));
func(1,2,3);
call_user_func("func",1,2,3);
func(1,2,3);
七、匿名函数
由于变量函数,存在两种调用方式,(func() $func();)
无法保证调用方法的统一,所以,变量的分号一定不能省略。
$func1 = function(){};
匿名函数本身也是变量,用var_dump();检测为Object类型

1 function func(){}
2 $fun = "func";
3 $fun();
4 func();
5
6 $func = function(){
7 echo "I am ZXX<br />";
8 };
9 $func(10);
10 var_dump($func);

八、include&require
1、两者的作用:都是用于引入外部的PHP文件到当前文件中。
2、两者的区别:当引入外部文件出错时,include会产生waring级别的警告,不会影响代码的后续执行;而require会产生error级别的错误,将阻断代码的执行
3、一般,当用于在文件最上方导入某些文件时,使用require导入,如果导入失败,则不再执行文件;
而如果是在某些分支条件中,导入执行某些操作,则一般使用include。一旦报错,不影响其他分支功能。
4、include_once和require_once表示:文件只能导入一次,如果多次调用此函数,则后面的语句会判断文件是否导入。
再决定是否导入新文件。
5、include和require可以导入各种类型的文件。
相当于在当前文件copy了一份,但是copy过程中,PHP引擎会进行适当的编译,确保不会出错。
6、include和require是函数,也是指令!PHP对于很多常用函数会提供指令的写法。
eg:echo("11");//函数写法 echo"11";//指令写法

1 $num = true;
2 if($num){
3 include'functionDate.php';
4 //require "functionDate.php";
5 func1();
6 func2();
7 func3();
8 }
9 echo "haha";

九、PHP闭包
在PHP中,子函数无法直接访问父函数的局部变量,必须使用User关键词向下传递!!!

1 $a = 12;
2 function func1(){
3 $num = 10;
4 $num1 = 11;
5 $func2 = function() use($num,$num1){//使用use关键词传递父函数局部变量
6 global $a;
7 var_dump($a);
8 var_dump($num);
9 var_dump($num1);
10 };
11 return $func2;
12 }
13 $f = func1();
14 $f($num);

如果参数中既有默认参数,也有非默认参数,那么默认参数列表
必须要在非默认参数列表后面,即调用的时候必须保证非默认列表的优先赋值。
PHP基础入门(二)【PHP函数基础】的更多相关文章
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- 2.Python爬虫入门二之爬虫基础了解
1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...
- Python爬虫入门二之爬虫基础了解
1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...
- C#基础入门 二
C#基础入门 二 循环语句 与C语言中用法相同. continue:结束本次循环(continue)后面的代码不再执行,进入下次循环(通常与if连用). 数组 一维数组定义:int[] intArra ...
- 转 Python爬虫入门二之爬虫基础了解
静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...
- Kotlin基础(二)函数的定义与调用
函数的定义与调用 一.预备知识:在Kotlin中创建集合 fun main(args: Array<String>) { //Kotlin中定义各自集合 val ,,,) val list ...
- guxh的python笔记二:函数基础
1,函数的参数 1.1,查看函数的参数类型 def run(a, *args, b, **kwargs): return a + b 可以通过如下方式查看参数类型: import inspect k ...
- pyhton matplotlib可视化图像基础(二维函数图、柱状图、饼图、直方图以及折线图)
//2019.07.22pyhton中matplotlib模块的应用pyhton中matplotlib是可视化图像库的第三方库,它可以实现图像的可视化,输出不同形式的图形1.可视化图形的输出和展示需要 ...
- C#学习笔记---基础入门(二)
枚举 枚举是被命名的整型常数的集合:枚举类型的变量只有赋值后才能使用:不同枚举中的枚举值可以重名:可以自定义枚举值. enum Playstates { 跑, 跳,下滑,左转,右 ...
- JAVA之Mybatis基础入门二 -- 新增、更新、删除
上一节说了Mybatis的框架搭建和简单查询,这次我们来说一说用Mybatis进行基本的增删改操作: 一. 插入一条数据 1.首先编写USER.XML(表的xml)使用insert元素,元素写在map ...
随机推荐
- Linux的硬盘使用情况、挂载、SSD挂载(查看df -h不能看到的卷)
linux上的盘和window的有区别,磁盘空间必须挂载在目录上,要不然没用 对与新增的硬盘.SSD固态硬盘.挂载到linux上的操作如下: df -h #显示目前在Linux系统上的文件系 ...
- centos7.2 linux 64位系统上安装mysql
1.在线安装mysql 在终端中命令行下输入(在官网下载mysql): # wget https://dev.mysql.com/downloads/repo/yum/mysql57-communit ...
- 基于搜狗搜索的微信公众号爬虫实现(C#版本)
Author: Hoyho Luo Email: luohaihao@gmail.com Source Url:http://here2say.me/11/ 转载请保留此出处 本文介绍基于搜狗的微信公 ...
- gitlab仓库迁移
遇到一个情况,需要将两个gitlab仓库合并.好在都是使用的ldap账户登陆,用户账户不需要迁移. 实际的使用情况下,需要迁移的主要部分为分组及分组下项目.gitlab的api还是很给力的,能够获取所 ...
- 实现LAMP
实现LAMP 1.LAMP工作原理 LAMP是一个强大的Web应用程序平台,其中L是指linux系统:A是指apache也就是http;M一般是mysql/mariadb数据库;P一般是php, pe ...
- Oracle RAC + ASM + Grid安装
(一)环境准备 主机操作系统 windows10 虚拟机平台 vmware workstation 12 虚拟机操作系统 redhat 5.5 x86(32位) :Linux.5.5.for.x86. ...
- Mvc 流程调用分析
链接地址 https://www.processon.com/view/link/59e71fbbe4b09000f03ce78e 总结: 1. 在Global.ascx 中我们使用RouteColl ...
- shell编程/字库裁剪(3)——验证
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7712496.html 作者:窗户 Q ...
- 浅谈前后端分离与实践 之 nodejs 中间层服务(二)
一.背景 书接上文,浅谈前后端分离与实践(一) 我们用mock服务器搭建起来了自己的前端数据模拟服务,前后端开发过程中只需定义好接口规范,便可以相互进行各自的开发任务.联调的时候,按照之前定义的开发规 ...
- CentOS本地yum源配置
现有一台处在局域网的linux服务器,无法ping通外网,本文是关于本地yum源的配置 环境 : CentOS 6.5 一 .挂载CentOS镜像文件 (1) 创建挂载文件夹,若此文件夹已存在可忽略 ...