PHP中功能强大却很少使用的函数实例小结


Posted in PHP onNovember 10, 2016

本文实例讲述了PHP中功能强大却很少使用的函数。分享给大家供大家参考,具体如下:

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 a()
{
  $numargs = func_num_args();
  $b = func_get_args();
  for ($i = 0; $i < $numargs; $i++) {
    echo $b[$i];
  }
}
a(111, 222, 333);
//显示 111 222 333
?>

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的值,我们可以获得不同的运行结果。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用php将任何格式视频转为flv的代码
Sep 03 PHP
php缩小png图片不损失透明色的解决方法
Dec 25 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
Jan 08 PHP
php常用数组函数实例小结
Dec 29 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
Mar 02 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
解决laravel资源加载路径设置的问题
Oct 14 PHP
php事件驱动化设计详解
Nov 10 #PHP
PHP的消息通信机制测试实例
Nov 10 #PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 #PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 #PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 #PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 #PHP
PHP实现的曲线统计图表示例
Nov 10 #PHP
You might like
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
PHP7 其他修改
2021/03/09 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python获取地震信息 微信实时推送
2019/06/18 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
使用Python实现分别输出每个数组
2019/12/06 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
介绍一下grep命令的使用
2012/06/28 面试题
财务整改报告范文
2014/11/05 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书