PHP中的函数看上去很简单,实际上功能非常强大,我这里按函数名称是否固定,可以分为以下三大类:

一、名称固定的函数:

这类函数,也叫:常规函数,直接用关键字function来创建,也是大家最熟悉的类型,例如:

<?php
//1按名调用:最直接和普通的方式
echo '1.用function关键字创建常规函数,按函数名称调用:<br>';
function add($a, $b){return $a.'+'.$b.'='.($a+$b);};
echo add(5,6);
echo '<hr>';

执行返回:

1.用function关键字创建常规函数,按函数名称调用:
5+6=11

二、名称动态设置的函数:

这类函数有很多种称呼,例如:匿名函数、可变函数、变量函数、闭包函数等,其实都一样的,大家别被名称吓住了。

这种动态设置的函数,是用引用这个函数的变量名来调用,所以非常适合放在回调函数中使用~~

为了教学需要,我这里统称为:匿名函数吧。

匿名函数的创建主要有二种方法,有的教材分开来说了,我这也分开吧。

1、创建方法一:用PHP内置的create_function(参数表,函数体)函数完成,这个函数有二个参数,这二参数必须放在引号中,别问为什么,PHP就是这样规定的,如果不服,那你创造出一个编程语言吧~~

//2.用系统函数create_function()来创建一个匿名函数/可变函数/变量函数/闭包函数
echo '2.用内置create_function()函数创建匿名函数,用变量名调用:<br>';
$func1 = create_function('$a,$b','return $a.\'+\'.$b.\'=\'.($a+$b);');
echo $func1(5,6);
echo '<hr>';

执行返回:

2.用内置create_function()函数创建匿名函数,用变量名调用:
5+6=11

2、创建方法二:用function关键字来创建,创建过程与常规函数一样,不同之处在于,它出现在值的位置上,也就是'='等号的右边。将创建好的函数整体赋给一个变量;

//3匿名函数:也叫闭包函数,将函数做为值赋给一个变量
echo '3.用function关键字创建匿名函数,用变量名调用:<br>';
$func2 = function ($a, $b){return $a.'+'.$b.'='.($a+$b);};
echo $func2(5,6);
echo '<hr>';

执行返回:

3.用function关键字创建匿名函数,用变量名调用:
5+6=11

三、没有函数名称,创建完直接传参调用执行:

这类函数,它也匿名函数很像,但更加的粗暴,创建好直接用括号一包,传上参数就可以调用了,所以这类函数根本不需要名字,属于一次性的函数。就像一次用品,用完就扔掉了。

//4自执行函数:创建完立即执行不必明示调用
echo '4.用function关键字创建匿名函数,然后直接传参调用执行:<br>';
echo (function ($a,$b){return $a.'+'.$b.'='.($a+$b);})(5,6); //自运行的匿名函数

执行返回:

4.用function关键字创建匿名函数,然后直接传参调用执行:
5+6=11

总结(非常重要,不得不看):

php中,函数的使用还是非常灵活的,但不论如何,函数,归根到底,还是一个处理过程。同时,也必须要有一个返回值,才能让用户感知它的存在,也及它的价值!

所以,函数总是当做一个值来使用,因此,不能出现在等号'='的左边,这就是函数与语言结构的最大区别。

例如,我们常说:echo()和list()是一个语言结构,不是一个函数,尽管看上去长得与函数一样,就是因为它们可以放在等号的左边,可以接受赋值。而函数不行。希望这篇文章,让你对函数有更深的理解~~

php函数的种类与调用方法大揭密的更多相关文章

  1. JavaScript函数的4种调用方法详解

    在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:函数调用形式.方法调用形式.构造 ...

  2. JavaScript 函数的4种调用方法

    JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. 作为一个函数调用 function myFunction(a, b) { return a * b; } ...

  3. JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...

  4. 【转】JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...

  5. ASP程序加密/解密方法大揭密

      如今,用ASP技术构建的网站随处可见.由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的 ...

  6. C#如何用IL和Emit类通过Calli来实现实例函数与静态函数的调用

    一. 介绍 最近充能看书,在书上看到函数调用可以 " 通过 ldftn 获得函数指针,然后使用 calli 指令 " 来进行调用,并说这种行为 " 类似 C 的函数指针, ...

  7. phpcms 的实用相关接口,函数,调用方法

    常用函数 , 打开include/global.func.php,下面存放一些公共函数view plaincopy to clipboardprint? strip_tags() 调用内容过滤html ...

  8. 模式识别 - libsvm该函数的调用方法 详细说明

    libsvm该函数的调用方法 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM ...

  9. jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法

    jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法   在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...

随机推荐

  1. 获取 metadata 过程详解 - 每天5分钟玩转 OpenStack(167)

    接上节,启动 neutron router 后 instance c1 终于拿到了 metadata, 从下面 c1 的启动日志可知: c1 所认为的 metadata 服务地址是 169.254.1 ...

  2. java学习笔记 --- 条件,循环语句

    一.三元运算符 A:格式    比较表达式?表达式1:表达式2;   B:执行流程:    首先计算比较表达式的值,看是true还是false.    如果是true,表达式1就是结果.    如果是 ...

  3. csvkit---python一个牛逼到不行的csv处理库

    先吐槽一下:不管是百度还是谷歌,查来查去除了官方文档之外就没有任何可以借鉴的例子,虽然官方文档写的挺好的.但是我一直以为是在python语言的方式运行的,结果是以命令行的方式运行的,搞得我还以为这个库 ...

  4. 《Django By Example》第十一章 中文 翻译 (个人学习,渣翻)

    第十一章 缓存内容 (译者 @ucag 注:这是倒数第二章,最后一个项目即将完成. @夜夜月 将会接过翻译的最后一棒.这本书的翻译即将完成.这也是我翻译的最后一章,作为英语专业的学生,我对于翻译有了更 ...

  5. 将 shell 脚本打包到 rpm 包中

    下以操作最好在虚拟机上操作:如 Docker 最方便了 1. 安装 rpmbuild yum -y install rpmbuild  rpmdevtools -y 2. 生成打包路径 使用 rpmd ...

  6. 开源的.NET媒体文件操作组件TagLib#解析

    人生得意须尽欢 莫使金樽空对月.写博客都会在吃饭后,每次吃饭都要喝上二两小酒,写博客前都要闲扯,这些都是个人爱好,改不掉了,看不惯的人,还望多多包含一下,有相同爱好的同学,咱们可以一起喝着小酒一边吹牛 ...

  7. iOS 应用关于弥补安全优化问题

    1.log输出会被中奖者截获,暴露信息,影响app得性能 在工程里面的pch文件加入以下代码 // 调试状态 #define LMLog(...) NSLog(__VA_ARGS__) #else / ...

  8. Androidstudio2.0.0汉化教程及汉化包。

    ()Eric为大家带来Androidstudio2.0.0的简单汉化教程,许多小伙伴喜欢使用中文版的AS那么没有中文的AS只能靠自己汉化取得更好的体验. 第一步下载AS2.0.0汉化包,我有链接给大家 ...

  9. 数位dp——hud3652

    B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  10. JavaWeb之Cookie和Session的区别

    Cookie和Session的区别 一.cookie机制和session机制的区别 ********************************************************** ...