可变参数

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函数技巧篇的更多相关文章

  1. FastReport 使用技巧篇

    使用技巧篇 1.FastReport中如果访问报表中的对象?       可以使用FindObject方法.      TfrxMemoView(frxReport1.FindObject('memo ...

  2. Visual Studio调试之断点技巧篇补遗

    原文链接地址:http://blog.csdn.net/Donjuan/article/details/4649372 讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写 ...

  3. Gatling脚本编写技巧篇(二)

    脚本示例: import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.durati ...

  4. 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  5. 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)

    1.简介 本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.拖拽操 ...

  6. 《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)

    1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...

  7. 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)

    1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...

  8. 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)

    1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...

  9. 《手把手教你》系列技巧篇(五十一)-java+ selenium自动化测试-字符串操作-下篇(详解教程)

    1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...

随机推荐

  1. RabbitMQ/pika模块

    简介 MessageQueue用于解决跨进程.跨线程.跨应用.跨网络的通信问题. RabbitMQ使用erlang开发,在windows上使用时要先安装erlang. 官方的示例比较容易理解,可以点这 ...

  2. 【HDU 5384】Danganronpa(AC自己主动机)

    看官方题解貌似就是个自己主动机裸题 比赛的时候用kuangbin的AC自己主动机模板瞎搞的,居然A了,并且跑的还不慢.. 存下模板吧 #include<cstdio> #include&l ...

  3. 6.游戏特别离不开脚本(3)-JS脚本操作java(3)(直接操作JS文件或者调用函数)

    java直接运行JS脚本文件的语句,游戏开发时,策划的配置文件什么的就可以分开管理了,游戏逻辑也是一样,比如:一个功能一个脚本或者一个系统一个脚本. import java.io.FileNotFou ...

  4. hadoop mapred和mapreduce包

    mapred包是老的1.0的map reduce api mapreduce包是新的2.0的map reduce api

  5. scrollView 代理方法的实现顺序的些许区别

  6. C.Candy

    There are NN children standing in a line. Each child is assigned a rating value. You are giving cand ...

  7. delphi 八字排盘源码(post数据以后,又分析数据)

    procedure TForm1.Button14Click(Sender: TObject);var  ls: TStringList;  lstr: string;  lss: TMemorySt ...

  8. NOT IN clause and NULL values

    https://stackoverflow.com/questions/129077/not-in-clause-and-null-values This issue came up when I g ...

  9. Centos7.2——自定义系统服务

    前言 顾明思议,自己创建系统服务,在上一篇博文中写道了,这里就详细写下~ 步骤 我是一段美丽的用户分割的废话~ 进入到系统服务目录 ··· cd /lib/systemd/system ··· 创建服 ...

  10. css中链接的4个状态 link、visited 、hover、active 顺序与设置

    link       未点时链接色visited  已点过的链接色hover   光标放入链接上的色active   点击时的样式 顺序一定要按link.visited.hover.active来设置 ...