PHP从入门到精通

之PHP中的函数

   各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持。PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新PHP中的函数知识,为大家带来最详细实用的知识讲解,感谢大家的支持!

   以下为函数的详细知识:

函数的声明和使用

1、函数名是标识符之一,只能有字母数字下划线,开头不能是数字。

函数名的命名,须符合"小驼峰法则"  myName my_name

函数名不区分大小写func(),FUNC()

函数名不能与已有函数名重复,不能与系统函数名重复;

2、function_exists("fun1");用于检测函数是否已声明;

注意:传入函数名,必须是字符串格式;返回结果为true/false;

简单函数的声明和调用:

function func1(){
echo "函数里面的语句";
}
func1();
FUNC1();
PHP中函数的作用域

1、局部变量:声明在函数内部的变量,称为局部变量。只在函数内部能用,函数外如需使用,需在函数中用return关键字返回;

2、全局变量:声明在函数外部的变量,称为全局变量。

<函数中使用全局变量的3种方式:>

3、函数中,使用变量,默认使用全局变量。只在函数外部能用,函数内如需使用,需在函数中用global关键字将变量改为全局变量引入;函数中的变量名如果与全局变量重复,global语句之上的为函数局部变量,global之下的为系统全局变量;

4、$GLOBALS[""]全局数组:

$GLOBALS[""]数组,是PHP给我们内置的全局数组,可以直接给数组添加值,无论在函数内外声明,均可在任何地方直接使用;

5、函数中使用全局变量还有一种方式,:通过给函数传参,可以在函数内部使用过全局变量;

但是,传递以后的参数是函数的局部变量,内部改变,外部不会变;

除非,传递的参数是地址function func($a1,&$a2){}//函数内部修改a1,全局a1不变;函数内修改a2,全局a2跟着变;

如果,函数的形参,出现了取址符号,则,调用函数时,实参必须是变量,而不能是自变量:

eg上式中:func(1,2)×   func(1,$a2)√

6、使用require和include包含,不会影响作用域;

实例展示:

$a1=10;
function func(){
$a1=30;
echo "0.$a1</br>";//global之上使用局部变量
$GLOBALS["a3"]=40;
echo $GLOBALS["a3"]."</br>";//global数组
global $a1;
$a2=20; echo "1.$a1</br>";//global之下使用全局变量
echo "1.$a2</br>";
return $a2."</br>";
}
$a2=func(); echo "2.{$a1}</br>";//使用全局变量
echo "2.{$a2}</br>";//通过return返回,通过变量接受
echo $GLOBALS["a3"]."</br>";//函数中通过$GLOBALS["a3"]声明,函数外能用。
静态变量

1、静态变量使用static关键字声明。

static $num=0;

2、静态变量的特点:

>>>静态变量在函数第一次加载的时候进行声明。

>>>函数使用完不会立即释放变量,静态变量在整个脚本过程中,只会声明一次。

>>>同一函数,多次调用,共享一个静态变量。

实例展示:

function func(){
static $num=0;
$num++;
echo $num."</br>";
}
func();
func();
func();
函数的参数传递

此处插入一条,需特别注意:在PHP中,设计参数传递时,实参列表只能比形参多,不能比实参少!

1、常规参数传递:

2、伪类型参数传递:(详见案例)

①通过&引用参数传递,函数内修改变量,函数外同步变化;

②形参为引用参数,实参只能是变量,不能是字面量:func(10)×

3、默认参数的调用:function func($a=10,$b){}  func(,20);//$a可以不传参数,默认是10;$b必须传参数

>>>如果参数中既有默认参数,又有非默认参数,那么,默认参数列表必须要在非默认参数列表的后面!即调用的时候,必须保证非默认参数的优先赋值。

4、可变参数列表传递:由于PHP实参可以比形参多,那么我们可以传递N个实参,并通过PHP内置函数取到对应参数。

func_get_args()//取所有参数列表(数组)

func_num_args()//返回参数的总个数,相当于count($arr);

func_get_arg(0)//根据下标,取每个参数;相当于$arr[0];

实例展示:

function($a){
$a+=10;
return $a;
}
echo func(10); //引用类型的参数传递
$a=10;
functionfunc(&$a){
$a+=10;
}
func($a);//通过取址符号,可以直接将传入的$a的值改掉。
echo $a; //默认参数
function func($b,$a=10){
return $a+$b;
}
echo func(20); //可变参数列表
function func(){
$arr=func_get_args();
var_dump(func_get_args());//取所有参数列表(数组)
var_dump(func_num_args());//返回参数的总个数
//var_dump(count($arr));//同上
var_dump(func_get_arg(0));//根据下标,取每个参数
//var_dump($arr[0]);//同上
$sum=0;
$count=func_num_args();
for($i=0;$i<$count;$i++){
//$sum+=func_get_arg($i);
$sum+=$arr[$i];
}
return $sum;
}
echo func(1,2,3,4,5);
回调函数

1、使用变量函数,自定义回调函数:

function($func){$func();}  -->  function f(){} --->  func("f")

2、使用call_user_func_array和call_user_func自定义回调函数:

两个函数的第一个参数,均为回调函数,表示执行当前回调;

不同点在于:前者的第二个参数为数组,并将数组的每个值赋给回调函数的参数列表

后者的参数列表直接展开写到第2~多个参数中

实例展示:

//变量函数
function func($a){
echo "Q的前端{$a}";
}
$fun="func";
$fun(10); //自定义回调函数
function func($start,$end,$fun){
//$fun="func";
//$fun();
for($i=$start;$i<=$end;$i++){
if($fun($i)){
echo "{$i}</br>";
}
}
}
function filter($num){
if($num%3!=0){
return true;
}else{
return false;
}
}
func(1,59,"filter"); //使用call_user_func_array和call_user_func自定义回调函数
function func(){
$arr = func_get_args() ;
$str = "";
for($i=0;$i<count($arr);$i++){
$str = $arr[$i];
}
return $str;
} //相当于apply
echo call_user_func_array("func", array("杰瑞","教育","HTML5","+","PHP"));
//相当于执行func函数,并且把数组的每一项作为参数传入
echo "<br>";
//相当于call
echo call_user_func("func","杰瑞","教育","HTML5","+","PHP");
匿名函数

由于变量函数在调用时存在多种调用方式(func()/$fun())

所以为了让函数的调用更加统一,才产生了匿名函数。

!!!声明匿名函数,函数体后面的分号必不可少!!!

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

实例展示:

function func(){}
func();
$fun="func";
$fun();
$func=function($a){
echo "这是匿名函数{$a}";
};
$func(10);//可以传参
递归函数

1、所谓递归,指的是在函数内部执行自身的操作;

2、递归分为两步:递(类似JS事件捕获)   归(类似JS事件冒泡);

  递:当最外层函数体中,遇到自身函数调用,继续进行内层函数执行。而外层函数的后半部分暂不执行。直到最内层函数执行完后,再逐步向外执行。

实例展示:

function func($num){
echo $num."</br>";
if(){
func($num-1);
}
echo $num."</br>";
}
func(10);

附图说明:

include&require

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

2、两者的区别:当引入文件错误时,include会产生警告,并不影响后续代码执行;而require会产生致命错误,后续代码全部不再执行;
3、一般,当用于在文件最上方导入某些文件时,使用require导入,如果导入失败,则不执行文件;
而如果是在某些分支条件中,导入某些操作,使用include导入,即使导入失败,不影响后续代码执行;
4、include_once和require_once表示:文件只能导入一次。如果多次调用函数,则后面的语句会判断文件是否导入,再决定是否导入新文件(效率优化问题,不推荐)
!!!注意:检测文件时,只关心文件是否导入,并不关心是以何种方式导入的;
5、include和require可以导入各种类型的文件,相当于在当前文件copy了一份,但是在copy过程中,PHP引擎会进行适当的编译,确保不出现不必要的错误。
6、include和require是函数,也是指令。PHP对很多常用函数,会提供指令的写法。
eg:函数写法:echo("11"); 指令写法:echo "11";

实例展示:

include ("funcText.php");
//require ("funcText.php");//接相对路径
func1();
func2();
func3();
以下为funcText.php文件中的代码:
<?php
header ("Content-Type:text/html; charset=utf-8"); function func1(){
echo "我是func1</br>";
}
function func2(){
echo "我是func2</br>";
}
function func3(){
echo "我是func3</br>";
}

本期分享就到这里,觉得内容不错的小伙伴请点推荐,欢迎大家在评论下方评论区与博主互动,谢谢大家!

未完,待续。。。

更多详细内容,敬请关注 Q的前端世界的技术博客。

【PHP】最详细PHP从入门到精通(二)——PHP中的函数的更多相关文章

  1. PHP从入门到精通(二)

     PHP从入门到精通 之PHP中的函数 各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持.PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新 ...

  2. 【PHP】最详细PHP从入门到精通(三)——PHP中的数组

     PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...

  3. 【PHP】最详细PHP从入门到精通(三)——PHP中的数组常用函数汇总

     PHP从入门到精通 之PHP中的数组常用函数详解 数组作为PHP中最常用的结构之一,PHP强大的数组函数功能,给数组的相关操作带来了极大的便利.今天给大家介绍的PHP中数组函数,是PHP数组中重要的 ...

  4. 【PHP】最详细PHP从入门到精通(四)——PHP中的字符串

     PHP从入门到精通 之PHP中的字符串 大家好,继续跟进PHP最详尽的知识更新,本周,跟大家重点讲一下PHP中字符串的使用.在PHP中,字符串是非常重要的一个概念,基本上大家想到的字符串的处理功能, ...

  5. 【PHP】最详细PHP从入门到精通(五)——PHP错误处理

     PHP从入门到精通 之PHP中的字符串 在创建脚本和 web 应用程序时,错误处理是一个重要的部分.如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门. 本教程介绍了 PH ...

  6. iOS开发-UI 从入门到精通(二)

    iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI ...

  7. 【PHP】最详细PHP从入门到精通(一)——想学习PHP的朋友们福利来了!

     PHP从入门到精通 (一)PHP简介和基本知识 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java ...

  8. Python基本语法,python入门到精通[二]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]我们已经在自己的windows电脑上搭建好了python的开发环境,这篇博客呢我就开始学习一下Python的基本语法.现 ...

  9. MyBatis从入门到精通(二):MyBatis XML方式的基本用法之Select

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 明确需求 书中提到的需求是一个基 ...

随机推荐

  1. SIP DB33标准笔记 注册/目录发送/心跳

    SIP协议扩展中: 在 RFC 3261 基础上定义了一个新方法 DO.方法 DO 的功能包括:控制对方动作.更新对方信息.查询对方状态.历史监控资料查询和回放等.发送方法 DO 的请求报文时,不会创 ...

  2. jquery使用CSS3实现文字动画效果插件Textillate.js

    Textillate是一款基于jquery的使用CSS3实现文字动画的小巧插件.Textillate.js集成了一些很棒的使用CSS3动画效果的 JavaScript 库,您可非常轻轻松地把这些动画效 ...

  3. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  4. redis多端口,多实例。

    本屌的redis装载/usr/local/redis了 cp    一份配置 vim  配置文件 port 修改 bind 绑定ip,默认0.0.0.0所有用户允许访问. dbfilename cac ...

  5. DirectFB学习笔记三

    本篇目的,通过键盘的esc键控制程序退出.学习输入设备产生事件,接收事件,产生反应. 首先获取输入设备 IDirectFBInputDevice *keyboard = NULL; dfb->G ...

  6. JS 实现banner图的滚动和选择效果

    CSS+JS实现banner图滚动和点击切换 HTML 部分代码: <body> <div id="banner"> <div id="in ...

  7. 系统启动 之 Linux系统启动概述(2)

    博客:http://blog.csdn.net/younger_china/article/details/51615916 Linu系统启动是一个"冗长乏味"的过程,那么我们现就 ...

  8. jade模板引擎简明用法

    ①.特性 首个单词为标签,有一些不能识别的标签可作为code,如each for case if  else if unless   zen coding风格添加标签,如 .nb#hello 生成 & ...

  9. 使用react native制作的微博客户端

    简要说明: 因为微博授权权限设置,本人的微博开放者账号权限太低,如果出现 'api请求次数受限,请更换. 10023' 弹框 或者 授权界面出错,需要自行更换开放者应用的appkey,授权回调页,Ap ...

  10. poj1751最小生成树

    The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor system of p ...