文档章节

PHP中处理函数的函数(Function Handling Functions)

酸奶喝不完
 酸奶喝不完
发布于 2012/09/11 17:01
字数 1043
阅读 51
收藏 3
call_user_func_array — 让参数以数组的形式调用一个函数
call_user_func — 调用一个存在的函数
create_function — 建立一个函数
func_get_arg — 获取函数中某个参数的值
func_get_args — 获取函数的所有参数并组成数组
func_num_args — 获取一个函数的参数个数
function_exists — 判定一个函数是否存在
get_defined_functions — 获取已有的函数信息
register_shutdown_function — 注册一个页面载入完成后运行的函数
register_tick_function — 注册一个按要求调用的函数
unregister_tick_function — 取消一个按要求调用的函数

get_defined_functions可以获取所有的PHP函数和自定义的函数:
复制内容到剪贴板
代码:
<?php
 function a(){}
 $b = get_defined_functions();
 print_r($b);
 //也许会显示1000多个已定义了的函数:)
 ?>
function_exists函数判定一个函数是否存在(可以是PHP函数,也可以是自定义函数)。
复制内容到剪贴板
代码:
<?php
 if (function_exists('a')) {
     echo "yes";
 } else {
     echo "no";
 }
 function a(){}
 // 显示 yes
 ?>
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:
复制内容到剪贴板
代码:
<?php
 function a($b,$c)
 {
     echo $b;
     echo $c;
 }
 call_user_func('a', "111","222");
 call_user_func('a', "333","444");
 //显示 111 222 333 444
 ?>
调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:
复制内容到剪贴板

代码:

<?php
 class a {
     function b($c)
     {
         echo $c;
     }
 }
 call_user_func(array("a", "b"),"111");
 //显示 111
 ?>

call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
复制内容到剪贴板
代码:
<?php
 function a($b, $c)
 {
     echo $b;
     echo $c;
 }
 call_user_func_array('a', array("111", "222"));
 //显示 111 222
 ?>
call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:
复制内容到剪贴板
代码:
<?php
 function a(&$b)
 {
     $b++;
 }
 $c = 0;
 call_user_func('a', &$c);
 echo $c;//显示 1
 call_user_func_array('a', array(&$c));
 echo $c;//显示 2
 ?>
func_num_args函数可以获取函数接受到参数的数量:
复制内容到剪贴板
代码:
<?php
 function a()
 {
     echo func_num_args();
 }
 a(111, 222, 333);
 //显示 3
 ?>
func_get_arg函数可以获取某一个传递过来参数的值,在下面的例子中,在函数中并没有具体说明有哪些参数会被接受,利用func_get_arg还可以获取额外的参数:
复制内容到剪贴板
代码:
<?php
 function a()
 {
      echo func_get_arg(1);
 }
 a (111, 222, 333);
 //显示 222
 ?>
func_get_args函数的作用和func_get_arg非常相似,是把所有的参数当成数组来调用:
复制内容到剪贴板

代码:

<?php
 function foo()
 {
     $numargs = func_num_args();
     echo "Number of arguments: $numargs\n";
 }
 
 foo(1, 2, 3);   
 ?>

create_function函数可以建立一个匿名的函数(函数名被PHP默认为lambda_1,lambda_2),样子比较古怪,但是形式比较奇特,要注意第二个参数内的语句要有“;”分隔:

复制内容到剪贴板
代码:
<?php
 $newfunc = create_function('$a,$b', 'return $a + $b;');
 echo $newfunc;
 echo $newfunc(2, 3);
 //显示 lambda_1 5
 ?>
register_shutdown_function函数可以注册一个在页面载入完成之后运行的函数(功能有点像缓存),register_shutdown_function也可以像call_user_func函数一样用作对类内部方法的调用:
复制内容到剪贴板
代码:
<?php
 function a() {
    echo  222 ;
 }
 echo 111;
 register_shutdown_function('a');
 //显示 111 222
 ?>
 
 <?php
 class a
 {
    function b ($c)
    {
       echo $c;
    }
 }
 register_shutdown_function (array ('a', 'b'), '111');
 //显示 111
 ?>
register_tick_function函数和unregister_tick_function函数必须要和declare流程控制机制合并使用,那么就先了解一下declare和tick:
declare (directive){
statement
}
Tick 是一个在 declare 代码段中解释器每执行 N 条低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。在每个 tick 中出现的事件是由 register_tick_function() 来指定的。举例如下:
复制内容到剪贴板
代码:
<?
 function foo($str) {
 static $i = 0;
 print "$str: $i<br>";
 $i++;
 }
 register_tick_function("foo", "count");
 declare (ticks = 6) {
 for($i=0; $i<20; $i++) {
 echo "$i<br>";
 }
 }
?>
在这个例子中的declare(ticks = N){statement}流程控制里面,每执行6行(ticks = 6)代码,就需要运行一次foo()函数,通过更改ticks的值,我们可以获得不同的运行结果。

本文转载自:http://www.itokit.com/bbs/redirect.php?tid=1748&goto=lastpost

酸奶喝不完
粉丝 4
博文 45
码字总数 1687
作品 0
大渡口
程序员
私信 提问
Smarty中文手册,Smarty教程,Smarty模板的入门教材

Smarty中文手册,Smarty教程,Smarty模板的入门教材 首先,这份Smarty中文手册的翻译工作是由喜悦国际村村民自发组织的,不代表任何人的意见和观点。对他们的无私奉献精神,我们表示感谢,他们...

晨曦之光
2012/03/09
570
0
React - 事件处理

类似于DOM事件处理,有几点不同之处: React的事件名字是首字母小写的驼峰式写法,而不是小写的。 在JSX里面,事件处理器是一个函数,而不是一个字符串。 例子,HTML: React: 在React里面,...

OSC首席键客
2016/11/11
89
0
linux C多线程下信号的使用

在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号...

So_care_about_y
2017/08/18
0
0
php2go-使用 Golang 实现 PHP 常用内置函数

使用Golang实现PHP常用内置函数,目前已经实现了140+函数。 下载&安装 https://github.com/syyongx/php2go PHP Functions Date/Time Functions String Functions URL Functions Array(Slice......

lnnen
2018/10/28
1
0
Laravel5.3之函数处理(Function Handling)

说明:Laravel中经常使用PHP的来设计代码,本文主要学习PHP的特性,来提高写代码时的设计质量。PHP提供了一些函数处理操作的内置函数,主要有: Function Handling calluserfuncarray()/callu...

botkenni
2016/11/15
25
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部