PHP基础入门(三)---函数

今天来给大家分享一下PHP的函数基础。有了前两章的了解,想必大家对PHP有了一定的基础了解。想回顾前两章的朋友可以点击 “PHP基础入门(一)”和“PHP基础入门(二)”   跳转页面,温习PHP的入门基础。

***本章关键词:函数的声明与使用;PHP中变量的作用域;静态变量;函数的参数传递;变量函数;回调函数;匿名函数;include&require;PHP闭包

现在,我们来看一下PHP的函数基础↓↓↓

函数的声明与使用

1、函数名是标识符之一,只能有数字字母下划线,开头不能是数字。
函数名的命名,须符合"小驼峰法则":myNameIsXiaoxi my_name_is_xiaoxi
函数名不区分大小写。func() Func() FUNC() 都可以
函数名不能与已有的函数名重复,不能与系统函数名重复。

2、function_exists("func1");用于检测函数是否已声明;
注意:传入的函数名,必须是字符串格式:返回结果为true/false。

PHP中变量的作用域

1、局部变量:声明在函数内部的变量,称为局部变量。只在函数内部能用,函数外加需使用,需在函数中使用return关键字返回。
2、全局变量:声明的函数外部的变量,称为全局变量。
3、函数中,使用变量,默认使用内部局部变量。如果,需在函数中使用全局变量,需要使用global关键字,将全局变量引用函数,才能使用。

函数中的变量名,如果与全局变量重复,global语句之上,为函数局部变量;global语句之下,为系统全局变量。

4、 $GLOBALS[]全局数组:
$GLOBALS[]数组,是PHP给我们内置的全局数组,可以直接给数组添加值,无论在函数内外声明,均可在任何地方直接使用。
$GLOBALS["a"] = 10; ---> echo $GLOBALS["a"];//任何位置直接使用

5、函数中使用全局变量,还有一种方式:通过给函数传参,可以在函数内部使用全局变量;
但是,传递以后的参数是函数的局部变量,内部改变,外部不会变。
除非,传递的参数是地址function func($a1,&$a2){} //函数内部修改a1,则全局a1不会变,函数内部修改a2,则全局a2会变。

如果函数的形参,出现了取址符号,则,调用函数时,实参必须是变量,而不能是字面量。
例如上例中,func($a1,$a2); √ func($a1,2); ×

6、使用require与include包含不会影响作用域。

静态变量

1、静态变量,使用static关键字声明。static $num = 10;
2、静态变量的特点:
>>>静态变量在函数第一次加载的时候进行声明。
>>>函数使用完不会立即释放静态变量,静态变量在整个脚本执行过程中,只会声明一次。
>>>同一函数,多次调用,共享同一个静态变量。

函数的参数传递

1、在PHP中,涉及参数传递时:实参列表只能比形参多,
2、常规参数传递:function func($a){} func($a);
3、引用参数传递:function func(&$a){} func($a);
①通过&引用参数传递,函数内修改变量,函数外同步变化
②形参为引用参数,实参只能是变量,不能是字面量 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_get_args());
var_dump(func_get_arg(0));//根据下标,返回每个参数

变量函数

1、将一个函数名,转为字符串后,赋给一个变量。这个变量,就是我们所说的变量函数,可以加()调用函数内容。
function func(){}--->$fun = "func";--->$func();

回调函数

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();
eg: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();)
所以为了让函数的调用更为同一,才产生了匿名函数!!!
声明匿名函数,函数体后面的分号必不可少!

匿名函数本身也是变量,用var_dump();检测为Object类型

演示代码:

 function func(){}
$fun = "func";
$fun();
func(); $func = function(){
echo "I am ZXX<br />";
};
$func(10);
var_dump($func);

include&require

1、两者的作用,都是用于引入外部的PHP文件到当前文件中。

2、两者的区别:当引用文件错误时,include会产生警告,并不影响后续代码执行。
而require会产生致命错误,后续代码全部不再执行。

3、一般,当用于在文件最上方导入某些文件时,使用require导入,如果导入失败,则不再执行文件;
而如果是在某些分支条件中,导入执行某些操作,则一般使用include。一旦报错,不影响其他分支功能。

4、include_once和require_once表示:文件只能导入一次,如果多次调用此函数,则后面的语句会判断文件是否导入。
再决定是否导入新文件。
(检测文件是否导入时,只关心文件是否已经导入,并不关心是否以何种方式导入的)
include("test.txt");
require_once "test.txt";//由于include进来了,require不再导入。

5、include和require可以导入各种类型的文件。
相当于在当前文件copy了一份,但是copy过程中,PHP引擎会进行适当的编译,确保不会出错。

6、include和require是函数,也是指令!PHP对于很多常用函数会提供指令的写法。
eg:echo("11");//函数写法 echo"11";//指令写法

演示代码:

 $num = true;
if($num){
include'functionDate.php';
//require "functionDate.php";
func1();
func2();
func3();
}
echo "haha";

PHP闭包

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

 $a = 12;
function func1(){
$num = 10;
$num1 = 11;
$func2 = function() use($num,$num1){//使用use关键词传递父函数局部变量
global $a;
var_dump($a);
var_dump($num);
var_dump($num1);
};
return $func2;
}
$f = func1();
$f($num);

作者:夕照希望
出处:http://www.cnblogs.com/hope666/ 

PHP基础入门(三)---PHP函数基础的更多相关文章

  1. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  2. C#基础入门 三

    C#基础入门 三 类 类使用class关键字进行声明,前面加一个访问修饰符,public class car{} 访问修饰符:修师傅可以用来修饰类和类成员等,控制它们的可见度 修饰符关键字分别为:pu ...

  3. Python基础篇(三)_函数及代码复用

    Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...

  4. 零基础入门c语言函数之递归函数

    今天来总结一下关于递归函数的使用方面的问题. 递归函数就是在函数使用的时候自己调用自己,层层调用,来实现你想要的功能. 有两个最常用的例子,我们来写一下. (1)计算阶乘 #include int f ...

  5. Java Script基础(三) 函数

    一.JavaScript中的函数 在JavaScript中,函数类似于Java中的方法,是执行特定功能的代码块,可以重复调用.JavaScript中的函数分为两种,一种是系统函数,另一种是自定义函数. ...

  6. mybatis入门(三):mybatis的基础特性

    mybatis的知识点: 1.mybatis和hibernate本质区别和应用场景 hibernate:是一个标准的ORM框架(Ojbect relation mapper对象关系映射).入门门槛较高 ...

  7. Oracle基础入门(三)

    一:PLsql一些基本操作 调节plsql的字体大小 二:创建表,如果学过sql server的数据库就会发现其实Oracle跟的一些新建表和新增修改其实是差不多的 新建表 Create table ...

  8. Mybatis框架基础入门(三)--Mapper动态代理方式开发

    使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题: Dao方 ...

  9. C#学习笔记---基础入门(三)

    泛型<T> 使用泛型能够最大限度的重用代码/保护类型安全,提高性能 泛型成员因为类型的不确定性,不能使用算术运算符/比较运算符 类型参数可以有多个,可以是编译器能够识别的任何类型 类型参数 ...

  10. Java基础入门 - 三种注释及文档注释详解

    类似C/C++,Java也支持单行和多行注释 注释中的字符在编译时会被忽略 注释通常为类.变量和方法的主要描述 单行注释 // 注释内容 多行注释 /* 注释内容 */ /* * 注释内容 */ 文档 ...

随机推荐

  1. 利刃 MVVMLight 7:命令深入

    上面一篇我们大致了解了命令的基本使用方法和基础原理,但是实际在运用命令的时候会复杂的多,并且有各种各样的情况. 一.命令带参数的情况: 如果视图控件所绑定的命令想要传输参数,需要配置 CommandP ...

  2. Asp.Net 网站一键部署技术(下)

    上一篇我们讲了服务端的配置,现在我们来说说客户端的配置. 0x01: 使用Visual Studio发布向导创建发布配置文件 然后新建配置文件,因为我们的网站可能会发布到多个地方,比如发布一份内网测试 ...

  3. JDK与Apache Tomcat服务器的安装步骤

    先解释一下JDK和Tomcat是什么: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP ...

  4. 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用

    前言 一直没有找到一个合适的展示个人项目的模板,所以自己动手使用 Vue 写了一个.该模板基于 Markdown 文件进行配置,只需要按一定规则编写 Markdown 文件,然后使用一个 在线工具 转 ...

  5. apache配置多个虚拟目录站点

    错误的做法 网上查了几个资料,做法如下:比如想配置两个www.web1.com  www.web2.com站点 打开httpd.conf ,然后添加: <VirtualHost *:80> ...

  6. 微信小程序框架

    框架 小程序开发框架的目标是通过尽可能简单.高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务. 框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的 ...

  7. (转)html中 cookie设置

    box=="checkBox  '是否记住用户密码'": window.onload=function init() {    var box = getCookie(" ...

  8. Oracle的substr函数

    一.Substr函数 substr(目标字符串,开始位置,长度) 注意:这里第三个参数:长度,相当于物理中的标量,没有方向性,所以不能用负值.虽然不报错,但是选择不出任何值出来(欢迎指正) 开始位置可 ...

  9. 第三章 霍夫变换(Hough Transform)

    主要内容: 霍夫变换的作用 霍夫变换检测直线的原理 霍夫变换检测圆的原理 OpenCV中的霍夫变换 1.霍夫变换检测直线原理 霍夫变换,英文名称Hough Transform,作用是用来检测图像中的直 ...

  10. java图片上传(mvc)

    最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.i ...