速战速决 (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 +鼠标左键 ...
随机推荐
- Android Instrumention.sendPointerSync发送Event失败分析
问题场景 Android4.3,进入被测app某个Activity后,测试案例ClickOnScreen出现异常(Click can not be completed!). Android4.4正常. ...
- jmx server 和jmx client
启动jmx server 和jmx client,通过jconsole进入jmx server 然后通过其中远程进程,进入jmx client: 发现,两者可用的tab页不同, MBean的数量类型也 ...
- 去除NSString里面的空格
NSString *password = @"12 34"; [password stringByTrimmingCharactersInSet:[NSCharacterSet ...
- 说说设计模式~组合模式(Composite)
返回目录 何时能用到它? 组合模式又叫部分-整体模式,在树型结构中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦.对于今天这个 ...
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...
- EF架构~充血模型设置不被持久化的属性
回到目录 在Poco实体中,一般只有属性没有方法,这在软件设计中称为贫血模型,而在DDD领域驱动设计中,比较提倡充血模型,即你的Poco实体中,即有属性,也有操作属性的方法,注意这里说的是操作属性的方 ...
- Warning: Null value is eliminated by an aggregate or other SET operation.
Null 值会被聚合函数忽略,默认情况下,Sql Server会给出Warning: Warning: Null value is eliminated by an aggregate or othe ...
- 用户代理字符串userAgent可实现的四个识别
定义 用户代理字符串:navigator.userAgent HTTP规范明确规定,浏览器应该发送简短的用户代理字符串,指明浏览器的名称和版本号.但现实中却没有这么简单. 发展历史 [1]1993年美 ...
- hdu 1811Rank of Tetris (并查集 + 拓扑排序)
/* 题意:这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B,等于B ...
- 最近修改的几个小bug
最近修改的几个 bug,问题不大,查找起来却几番周折,汇总起来如下. 1.诡异电话号码 客服邮件反馈,很多用户服务热线变成了“0371-45875487”.看到这问题的第一反映是可能因为程序某个地方有 ...