速战速决 (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 +鼠标左键 ...
随机推荐
- sigar
从http://sourceforge.net/projects/sigar/files/sigar/1.6/hyperic-sigar-1.6.4.zip/download下载sigar, 参照了h ...
- EF架构~CodeFirst自关联表的插入
回到目录 这个文章对之前EF的一个补充,对于一些自关联表的添加,如果你建立了表约束确实有这种问题,一般主键为整形自增,父ID为可空,这时,在添加时如果不为ID赋值,结果就会出错. 错误: 无法确定依赖 ...
- Programming in lua 杂记(转)
1,loadstring 编译的时候不关心词法范围: local i = 0 f = loadstring("i = i + 1") g = function () i = ...
- [常见问题]在Linux下执行Redis命令不起作用.
redis 127.0.0.1:6379> 这个后面无论输入什么命令都没有返回 ok 或者其他的信息,一直保持截图的状态: 解决方法:在SecureCRT中设置Options-->Sess ...
- 发现一个百度的密码。。。记最近一段时间的php感想
请看图. 突然想看一下百度的cookie. 最近百度一年真是多攒多难,我一直挺百度啊.百度文化就是程序员文化,但是收到中国其他文化的侵蚀,不得不变, 任何人重构系统,都会有大概百分三十左右的性能提升. ...
- iOS ---Extension编程指南
当iOS 8.0和OS X v10.10发布后,一个全新的概念出现在我们眼前,那就是应用扩展.顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他app时使用该项功能.你可以开 ...
- WPF入门教程系列十三——依赖属性(三)
四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只 ...
- 第六节:Vue过滤器的用法和自定义过滤器
1.过滤器的用法,用 '|' 分割表达式和过滤器. 例如:{{ msg | filter}} {{msg | filter(a)}} a就标识filter的一个参数. 用两个过滤器:{{ ...
- Python数据类型之“文本序列(Text Sequence)”
Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不可变序列.字符串字面量有多种形式: 单引号:'允许嵌入"双&q ...
- Java 线程 — ThreadLocal
ThreadLocal 先来看看ThreadLocal的注释: This class provides** thread-local variables**. These variables diff ...