速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
作者:webabcd
介绍
速战速决 之 PHP
- 函数基础
- 函数参数
- 函数返回值
- 可变函数
- 匿名函数
- 闭包函数
- 回调函数
示例
1、函数的相关知识点 1(基础)
function/function1.php
- <?php
- /**
- * 函数的相关知识点 1(基础)
- */
- // 可以在相关的 function 声明语句之前调用该函数
- f1();
- function f1()
- {
- echo "f1";
- echo "<br />";
- }
- // 这里调用 f2() 就错误了
- // f2();
- $b = true;
- if ($b)
- {
- function f2() // 条件成立才会声明此函数
- {
- echo "f2";
- echo "<br />";
- }
- }
- f2();
- // 这里调用 f4() 就错误了(因为 f4 的声明是在 f3 的内部,所以要先调用 f3 才能再调用 f4)
- // f4();
- f3();
- f4();
- function f3()
- {
- echo "f3";
- echo "<br />";
- function f4()
- {
- echo "f4";
- echo "<br />";
- }
- }
2、函数的相关知识点 2(函数参数)
function/function2.php
- <?php
- /**
- * 函数的相关知识点 2(函数参数)
- */
- // 带参数的函数
- f1("webabcd");
- function f1($name)
- {
- echo "hello " . $name; // output: hello webabcd
- echo "<br />";
- }
- // 带参数的函数(参数是引用类型)
- $name = "webabcd";
- f2($name);
- function f2(&$n) // 参数是引用类型
- {
- echo "hello " . $n; // output: hello webabcd
- echo "<br />";
- $n = "wanglei"; // $n 是引用类型,其与全局变量 $name 指向的内容是一样的
- }
- echo "hello " . $name; // output: hello wanglei
- echo "<br />";
- // 带参数的函数(参数可以指定默认值)
- f3("hello "); // output: hello webabcd
- f3("hello ", "wanglei"); // output: hello wanglei
- function f3($p1, $p2 = "webabcd") // 参数的默认值只能是常量,不能是表达式
- {
- echo $p1 . $p2;
- echo "<br />";
- }
3、函数的相关知识点 3(函数返回值)
function/function3.php
- <?php
- /**
- * 函数的相关知识点 3(函数返回值)
- */
- // 带返回值的函数
- $result1 = f1("webabcd");
- echo $result1;
- echo "<br />";
- function f1($name)
- {
- return "hello " . $name; // output: hello webabcd
- }
- // 从函数返回以一个引用(函数的声明和调用都要加 &)
- $result2 = &f2();
- echo $result2; // output: 1
- echo "<br />";
- $result2 = 100; // $result2 是个引用,指向 $i 所指向的内容,所以此句之后 $i 的值为 100
- $result3 = &f2();
- echo $result3; // output: 101
- echo "<br />";
- function &f2() // 此函数会返回一个引用(函数的声明和调用都要加 &)
- {
- static $i = 0;
- $i ++;
- return $i;
- }
4、函数的相关知识点 4(可变函数,匿名函数,闭包函数)
function/function4.php
- <?php
- /**
- * 函数的相关知识点 4(可变函数,匿名函数,闭包函数)
- */
- // variable function(可变函数),将变量的值作为函数名
- function f1()
- {
- echo "f1"; // output: f1
- echo "<br />";
- }
- function f2()
- {
- echo "f2"; // output: f2
- echo "<br />";
- }
- $func = 'f1';
- $func();
- $func = 'f2';
- $func();
- // 匿名函数
- echo preg_replace_callback // output: userName
- (
- '~-([a-z])~',
- function ($match) // 匿名函数
- {
- return strtoupper($match[1]);
- },
- 'user-name'
- );
- // 闭包函数
- // $f3("webabcd"); // 这是错误的,对于闭包函数来说,调用时要在声明语句的后面
- $f3 = function($name)
- {
- echo "hello " . $name; // output: hello webabcd
- echo "<br />";
- }; // 别忘了闭包函数的“;”
- $f3("webabcd");
5、函数的相关知识点 5(回调函数)
function/function5.php
- <?php
- /**
- * 函数的相关知识点 5(回调函数)
- */
- // 用于演示如何回调(callback)函数
- function myCallbackFunction()
- {
- return 'myCallbackFunction';
- }
- class MyClass1
- {
- // 用于演示如何回调(callback)实例方法
- public function myMethod1()
- {
- echo 'MyClass1 myMethod1';
- echo '<br />';
- }
- // 用于演示如何回调(callback)类方法
- public static function myMethod2()
- {
- echo 'MyClass1 myMethod2';
- echo '<br />';
- }
- }
- // 通过 call_user_func 调用指定的函数
- echo call_user_func('myCallbackFunction');
- echo '<br />';
- $obj1 = new MyClass1();
- // 通过 call_user_func 调用指定对象的指定方法
- call_user_func(array($obj1, 'myMethod1'));
- // 通过 call_user_func 调用指类的类方法
- call_user_func(array('MyClass1', 'myMethod2'));
- // 通过 call_user_func 调用指类的类方法(PHP 5.2.3 或以上)
- call_user_func('MyClass1::myMethod2');
OK
[源码下载]
速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数的更多相关文章
- C#多线程函数如何传参数和返回值
详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统. C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...
- Python基础学习----参数和返回值
# 函数的参数和返回值 # 4种组合方式 # 1.无参无返 # def methodone(): # 2.无参有返 def methodtwo(): a=10 return a # 3.有参无返 # ...
- STL算法设计理念 - 函数对象和函数对象当参数和返回值
函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...
- 第4天:function对象(案例:获取当前日期属于当年第几天、arguments对象、函数类型、参数、返回值、自身调用)
获取当前日期输入当年第几天 //输入,年月日,获取这个日期是这一年的第几天 //年-月--日:20171月31日 function getDay(year,month,day){ //定义变量存储对应 ...
- 【python】-- 函数非固定参数,返回值(return)
函数非固定参数 1.默认参数: 代码如下: def information_register(name,age,country,sex): print("----注册信息------&quo ...
- python笔记六(函数的参数、返回值)
一 调用函数 在写函数之前,我们先尝试调用现有的函数 >>> abs(-9) 9 除此之外,还有我们之前使用的len()等.可以用于数据类型转换的 int() float() str ...
- C#秘密武器之多线程——参数与返回值
线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...
- JS基础研语法---函数基础总结---定义、作用、参数、返回值、arguments伪数组、作用域、预解析
函数: 把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用: 代码重用 函数的参数: 形参:函数定义的时候,函数名字后面的小括号里的变量 实参:函数调用的时候,函数名 ...
- JS基础语法---函数---介绍、定义、函数参数、返回值
函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...
随机推荐
- NanoProfiler - 适合生产环境的性能监控类库 之 实践ELK篇
上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇 上次介绍了NanoProfiler的大数据分析理念,一晃已经时隔一年多了,真是罪过! 有朋友问到何时开源的问题 ...
- sizeof && strlen 的区别
本文主要记录了 sizeof 操作符 和 strlen() 函数的区别,以及各自的用途.(在下才疏学浅,发现错误,还请留言指正) sizeof 和 strlen 的区别 示例代码如下: #includ ...
- jQuery疑惑记录
不断更新 1.项目中有一句 this.$html = $('<div/>').html(html).attr('sspa-mod-id', this.modName).hide();不知道 ...
- NSString NSNumber 相互转化
NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init]; NSNumber *firstNum = [NSNumber n ...
- WebApi系列~开放的CORS,跨域资源访问对所有人开放
回到目录 之前有客户问我,如何AJAX跨域post,这个问题挺有意思,在我们看来,我是不被允许的,因为它是不安全的,但随着web api的火热,这个东西也被人们一步步的接受了,确实,有时,我们的接口希 ...
- MVVM架构~knockoutjs系列之验证信息自定义输出~续
返回目录 上一讲中,我以一个实际中的例子说明了knockoutjs的自定义验证功能,在使用过程中,出现了一个问题,当然了不是问题,只是一种需求,上一讲中自定义验证的表现是:当页面加载后,自动显示有问题 ...
- Nginx反向代理搭建配置
1.反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个 ...
- react7 react 三目运算
<body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...
- WPF入门教程系列十三——依赖属性(三)
四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只 ...
- C#与JS实现 获取指定字节长度 中英文混合字符串 的方法
平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错. 尤其是插入中英文混合字符串时,SQL Server中一般中文要 ...