[源码下载]

速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

作者:webabcd

介绍
速战速决 之 PHP

  • 函数基础
  • 函数参数
  • 函数返回值
  • 可变函数
  • 匿名函数
  • 闭包函数
  • 回调函数

示例
1、函数的相关知识点 1(基础)
function/function1.php

  1. <?php
  2. /**
  3. * 函数的相关知识点 1(基础)
  4. */
  5.  
  6. // 可以在相关的 function 声明语句之前调用该函数
  7. f1();
  8. function f1()
  9. {
  10. echo "f1";
  11. echo "<br />";
  12. }
  13.  
  14. // 这里调用 f2() 就错误了
  15. // f2();
  16. $b = true;
  17. if ($b)
  18. {
  19. function f2() // 条件成立才会声明此函数
  20. {
  21. echo "f2";
  22. echo "<br />";
  23. }
  24. }
  25. f2();
  26.  
  27. // 这里调用 f4() 就错误了(因为 f4 的声明是在 f3 的内部,所以要先调用 f3 才能再调用 f4)
  28. // f4();
  29. f3();
  30. f4();
  31. function f3()
  32. {
  33. echo "f3";
  34. echo "<br />";
  35.  
  36. function f4()
  37. {
  38. echo "f4";
  39. echo "<br />";
  40. }
  41. }

2、函数的相关知识点 2(函数参数)
function/function2.php

  1. <?php
  2. /**
  3. * 函数的相关知识点 2(函数参数)
  4. */
  5.  
  6. // 带参数的函数
  7. f1("webabcd");
  8. function f1($name)
  9. {
  10. echo "hello " . $name; // output: hello webabcd
  11. echo "<br />";
  12. }
  13.  
  14. // 带参数的函数(参数是引用类型)
  15. $name = "webabcd";
  16. f2($name);
  17. function f2(&$n) // 参数是引用类型
  18. {
  19. echo "hello " . $n; // output: hello webabcd
  20. echo "<br />";
  21.  
  22. $n = "wanglei"; // $n 是引用类型,其与全局变量 $name 指向的内容是一样的
  23. }
  24. echo "hello " . $name; // output: hello wanglei
  25. echo "<br />";
  26.  
  27. // 带参数的函数(参数可以指定默认值)
  28. f3("hello "); // output: hello webabcd
  29. f3("hello ", "wanglei"); // output: hello wanglei
  30. function f3($p1, $p2 = "webabcd") // 参数的默认值只能是常量,不能是表达式
  31. {
  32. echo $p1 . $p2;
  33. echo "<br />";
  34. }

3、函数的相关知识点 3(函数返回值)
function/function3.php

  1. <?php
  2. /**
  3. * 函数的相关知识点 3(函数返回值)
  4. */
  5.  
  6. // 带返回值的函数
  7. $result1 = f1("webabcd");
  8. echo $result1;
  9. echo "<br />";
  10. function f1($name)
  11. {
  12. return "hello " . $name; // output: hello webabcd
  13. }
  14.  
  15. // 从函数返回以一个引用(函数的声明和调用都要加 &)
  16. $result2 = &f2();
  17. echo $result2; // output: 1
  18. echo "<br />";
  19. $result2 = 100; // $result2 是个引用,指向 $i 所指向的内容,所以此句之后 $i 的值为 100
  20. $result3 = &f2();
  21. echo $result3; // output: 101
  22. echo "<br />";
  23. function &f2() // 此函数会返回一个引用(函数的声明和调用都要加 &)
  24. {
  25. static $i = 0;
  26. $i ++;
  27.  
  28. return $i;
  29. }

4、函数的相关知识点 4(可变函数,匿名函数,闭包函数)
function/function4.php

  1. <?php
  2. /**
  3. * 函数的相关知识点 4(可变函数,匿名函数,闭包函数)
  4. */
  5.  
  6. // variable function(可变函数),将变量的值作为函数名
  7. function f1()
  8. {
  9. echo "f1"; // output: f1
  10. echo "<br />";
  11. }
  12. function f2()
  13. {
  14. echo "f2"; // output: f2
  15. echo "<br />";
  16. }
  17. $func = 'f1';
  18. $func();
  19. $func = 'f2';
  20. $func();
  21.  
  22. // 匿名函数
  23. echo preg_replace_callback // output: userName
  24. (
  25. '~-([a-z])~',
  26. function ($match) // 匿名函数
  27. {
  28. return strtoupper($match[1]);
  29. },
  30. 'user-name'
  31. );
  32.  
  33. // 闭包函数
  34. // $f3("webabcd"); // 这是错误的,对于闭包函数来说,调用时要在声明语句的后面
  35. $f3 = function($name)
  36. {
  37. echo "hello " . $name; // output: hello webabcd
  38. echo "<br />";
  39. }; // 别忘了闭包函数的“;”
  40. $f3("webabcd");

5、函数的相关知识点 5(回调函数)
function/function5.php

  1. <?php
  2. /**
  3. * 函数的相关知识点 5(回调函数)
  4. */
  5.  
  6. // 用于演示如何回调(callback)函数
  7. function myCallbackFunction()
  8. {
  9. return 'myCallbackFunction';
  10. }
  11.  
  12. class MyClass1
  13. {
  14. // 用于演示如何回调(callback)实例方法
  15. public function myMethod1()
  16. {
  17. echo 'MyClass1 myMethod1';
  18. echo '<br />';
  19. }
  20.  
  21. // 用于演示如何回调(callback)类方法
  22. public static function myMethod2()
  23. {
  24. echo 'MyClass1 myMethod2';
  25. echo '<br />';
  26. }
  27. }
  28.  
  29. // 通过 call_user_func 调用指定的函数
  30. echo call_user_func('myCallbackFunction');
  31. echo '<br />';
  32.  
  33. $obj1 = new MyClass1();
  34. // 通过 call_user_func 调用指定对象的指定方法
  35. call_user_func(array($obj1, 'myMethod1'));
  36.  
  37. // 通过 call_user_func 调用指类的类方法
  38. call_user_func(array('MyClass1', 'myMethod2'));
  39.  
  40. // 通过 call_user_func 调用指类的类方法(PHP 5.2.3 或以上)
  41. call_user_func('MyClass1::myMethod2');

OK
[源码下载]

速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数的更多相关文章

  1. C#多线程函数如何传参数和返回值

          详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统.   C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...

  2. Python基础学习----参数和返回值

    # 函数的参数和返回值 # 4种组合方式 # 1.无参无返 # def methodone(): # 2.无参有返 def methodtwo(): a=10 return a # 3.有参无返 # ...

  3. STL算法设计理念 - 函数对象和函数对象当参数和返回值

    函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...

  4. 第4天:function对象(案例:获取当前日期属于当年第几天、arguments对象、函数类型、参数、返回值、自身调用)

    获取当前日期输入当年第几天 //输入,年月日,获取这个日期是这一年的第几天 //年-月--日:20171月31日 function getDay(year,month,day){ //定义变量存储对应 ...

  5. 【python】-- 函数非固定参数,返回值(return)

    函数非固定参数 1.默认参数: 代码如下: def information_register(name,age,country,sex): print("----注册信息------&quo ...

  6. python笔记六(函数的参数、返回值)

    一 调用函数 在写函数之前,我们先尝试调用现有的函数 >>> abs(-9) 9 除此之外,还有我们之前使用的len()等.可以用于数据类型转换的 int() float() str ...

  7. C#秘密武器之多线程——参数与返回值

    线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...

  8. JS基础研语法---函数基础总结---定义、作用、参数、返回值、arguments伪数组、作用域、预解析

    函数: 把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用: 代码重用 函数的参数: 形参:函数定义的时候,函数名字后面的小括号里的变量 实参:函数调用的时候,函数名 ...

  9. JS基础语法---函数---介绍、定义、函数参数、返回值

    函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...

随机推荐

  1. NanoProfiler - 适合生产环境的性能监控类库 之 实践ELK篇

    上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇 上次介绍了NanoProfiler的大数据分析理念,一晃已经时隔一年多了,真是罪过! 有朋友问到何时开源的问题 ...

  2. sizeof && strlen 的区别

    本文主要记录了 sizeof 操作符 和 strlen() 函数的区别,以及各自的用途.(在下才疏学浅,发现错误,还请留言指正) sizeof 和 strlen 的区别 示例代码如下: #includ ...

  3. jQuery疑惑记录

    不断更新 1.项目中有一句 this.$html = $('<div/>').html(html).attr('sspa-mod-id', this.modName).hide();不知道 ...

  4. NSString NSNumber 相互转化

    NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init]; NSNumber *firstNum = [NSNumber n ...

  5. WebApi系列~开放的CORS,跨域资源访问对所有人开放

    回到目录 之前有客户问我,如何AJAX跨域post,这个问题挺有意思,在我们看来,我是不被允许的,因为它是不安全的,但随着web api的火热,这个东西也被人们一步步的接受了,确实,有时,我们的接口希 ...

  6. MVVM架构~knockoutjs系列之验证信息自定义输出~续

    返回目录 上一讲中,我以一个实际中的例子说明了knockoutjs的自定义验证功能,在使用过程中,出现了一个问题,当然了不是问题,只是一种需求,上一讲中自定义验证的表现是:当页面加载后,自动显示有问题 ...

  7. Nginx反向代理搭建配置

    1.反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个 ...

  8. react7 react 三目运算

    <body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...

  9. WPF入门教程系列十三——依赖属性(三)

    四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只 ...

  10. C#与JS实现 获取指定字节长度 中英文混合字符串 的方法

    平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错. 尤其是插入中英文混合字符串时,SQL Server中一般中文要 ...