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

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

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

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

 

如今,咱们来看一下PHP的函数基础↓↓↓html

 

 

 

 

函数的声明与使用

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

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

 

PHP中变量的做用域

一、局部变量:声明在函数内部的变量,称为局部变量。只在函数内部能用,函数外加需使用,需在函数中使用return关键字返回。
二、全局变量:声明的函数外部的变量,称为全局变量。
三、函数中,使用变量,默认使用内部局部变量。若是,需在函数中使用全局变量,须要使用global关键字,将全局变量引用函数,才能使用。app

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

四、 $GLOBALS[]全局数组:
$GLOBALS[]数组,是PHP给咱们内置的全局数组,能够直接给数组添加值,不管在函数内外声明,都可在任何地方直接使用。
$GLOBALS["a"] = 10; ---> echo $GLOBALS["a"];//任何位置直接使用函数

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

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

六、使用require与include包含不会影响做用域。3d

 

静态变量

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

 

函数的参数传递

一、在PHP中,涉及参数传递时:实参列表只能比形参多,
二、常规参数传递:function func($a){} func($a);
三、引用参数传递:function func(&$a){} func($a);
①经过&引用参数传递,函数内修改变量,函数外同步变化
②形参为引用参数,实参只能是变量,不能是字面量 func(10); ×
四、默认参数:function func($b,$a=10){} func(20);
//是$能够不传,默认为10;$b必须传递,不然使用时未定义报错。
若是参数中既有默认参数,也有非默认参数,那么默认参数列表
必需要在非默认参数列表后面,即调用的时候必须保证非默认列表的优先赋值。

五、可变参数列表:因为PHP实参能够比形参多,那么咱们能够传递N个实参,并经过PHP内置函数取到对应参数。
var_dump(func_get_args());//取全部参数列表(数组)
var_dump(func_num_args());//返回参数的总个数至关于count(func_get_args());
var_dump(func_get_arg(0));//根据下标,返回每一个参数

 

变量函数

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

 

回调函数

一、使用变量函数,自定义回调函数
function func($func){$func();}--->function f(){}--->func("f");

二、使用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类型

演示代码:

 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

一、二者的做用,都是用于引入外部的PHP文件到当前文件中。

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

三、通常,当用于在文件最上方导入某些文件时,使用require导入,若是导入失败,则再也不执行文件;
而若是是在某些分支条件中,导入执行某些操做,则通常使用include。一旦报错,不影响其余分支功能。

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

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

六、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);

 

 

 


 

 

 

做者:夕照但愿
出处: http://www.cnblogs.com/hope666/  
相关文章
相关标签/搜索