PHP函数技巧篇
可变参数
Php提供3个函数用于检索在函数中所传递的参数。
$array = func_get_args(); //返回一个提供给函数的所有参数的数组
$count = func_num_args(); // 返回提供给函数的参数数目
$value = func_get_arg(arg_num); // 返回来自一个index的特定参数
这样函数的返回值不能直接作为一个参数给其他的函数使用,可以先赋值给变量,然后传给参数
例子(返回参数和)
function countList(){
if (func_get_args() == 0)
return false;
else{
$count = 0;
for ($i=0; $i<func_num_args(); $i++){
$count += func_get_arg($i);
}
return $count;
}
}
echo countList(1, 5, 9); //输出15
返回值的引用
例子
$name = array('fred', 'barney','wilma', 'betty');
function &findOne($n){
global $names;
return $names[$n];
}
$person = &findOne(1);
$person = 'barnetta'; // 改变了$names[1]
说明
这里findOne返回的是name[1]的别名,而不是name[1]值的拷贝,person和name[1]所指的为同一块内存。尝尝被用于高效的从函数返回大量值,但是php写时复制机制的存在,反而有时候会使引用比返回值的速度要慢。
可变函数
定义
基于变量的值调用函数($$结构),可以在变量名后面增加一个括号来调用函数,变量值就是函数名。
例子
$which(); //如果$witch的值是first,名为first的函数就会被调用
notice
如果没有这个变量对应存在的函数,代码执行时会产生一个运行时错误,function_exists($witch)可以判断此函数是否存在
匿名函数:
<?php
$message = 'hello';
$example = function () {
var_dump($message);
};
echo $example();
// Notice: Undefined variable: message in /example.php on line 6
// 因为匿名没有继承变量
// 继承 $message
$example = function () use ($message) {
var_dump($message);
};
echo $example(); //hello
// 匿名函数继承变量,变量存在,调用成功
$message = 'world';
echo $example(); //hello
// 函数中变量的值,在定义函数时被定义,而不是被调用
$message = 'hello';
$example = function () use (&$message) {
var_dump($message);
};
echo $example(); // hello
$message = 'world';
echo $example(); //world
//继承引用, 当变量值在父类中被改变,函数会被影响
$example = function ($arg) use ($message) {
var_dump($arg . ' ' . $message);
};
$example("hello"); // hello world
// 闭包也可以接受其他正常参数
?>
PHP函数技巧篇的更多相关文章
- FastReport 使用技巧篇
使用技巧篇 1.FastReport中如果访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject('memo ...
- Visual Studio调试之断点技巧篇补遗
原文链接地址:http://blog.csdn.net/Donjuan/article/details/4649372 讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写 ...
- Gatling脚本编写技巧篇(二)
脚本示例: import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.durati ...
- 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
1.简介 本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.拖拽操 ...
- 《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)
1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
- 《手把手教你》系列技巧篇(五十一)-java+ selenium自动化测试-字符串操作-下篇(详解教程)
1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
随机推荐
- 基于DM642 RAW采集格式的视频驱动开发及应用
摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析.修改用于标准格式的视频 ...
- Tomcat安全配置规范
第1章 账号管理.认证授权 1.1 账号 1.1.1 共享帐号管理 安全基线项目名称 Tomcat共享帐号管理安全基线要求项 安全基线编号 SBL-Tomcat-01-01-01 安全基线项说明 ...
- Gym - 100341C FFT优化DP
题目链接:传送门 题解: 设定dp[i][j]在深度为i下,使用j个节点的方案数 显然的转移方程组就是 dp[h][n] = dp[h-1][i] * dp[h-1][n-i-1] + 2*dp[h- ...
- 对云资源服务商资源读写的架构思考:前端代码走token
第一.统一了访问端接口.提高前端开发速度:第二统一了阿里各个产品的 数据读写模式: 第三,我们的服务器产生token时对读写规则做限制,特定的token由特定的规则产生,而不是让前端代代码去管控限制 ...
- Provided Maven Coordinates must be in the form 'groupId:artifactId:version'.
[hadoop@hadoop1 bin]$ ./spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.10-2.2.1 Ex ...
- Deep Learning 36:python中的一些函数
1.map(function, sequence[, sequence, ...])函数:返回一个list作用:map的作用是以参数序列中的每一个元素调用function函数,返回包含每次functi ...
- struts2 过滤器
Chain.doFilter的作用就是继续请求的传递,可传递给下一个filter也可传递给目标页面 如左侧传递给filter2,但fiter2使用上面或者下面的方法将倾情重定向到一个新的页面,而不再传 ...
- bashdb bashdebug
sudo apt-get install bashdb bashdb --debug 一.列出代码和查询代码类: l 列出当前行以下的10行 - 列出正在执行的代码行的前面10行 . 回到正在执行 ...
- python selenium实现百度搜索
1.环境 python2.7+selenium+phantomjs+linux 2.代码 #-*-coding:utf-8 -*- from selenium import webdriver fro ...
- html的书写规范,有哪些注意点
1.最开始的声明格式与编码格式,注意html5与和html4.0的区别,注意对不同浏览器的渲染作用: 2.<head></head>标签中的相关内容的编写: 3.确保引入的jq ...