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中动态显示签名和ip原理
Mar 28 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
jQuery+php实现ajax文件即时上传的详解
Jun 17 PHP
php购物车实现方法
Jan 03 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
浅谈php的优缺点
Jul 14 PHP
php中switch语句用法详解
Aug 17 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
PHP缓冲区用法总结
2016/02/14 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
JS 建立对象的方法
2007/04/21 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
JS画线(实例代码)
2013/11/20 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python中的多重装饰器
2015/04/11 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
python中的错误如何查看
2020/07/08 Python
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
cf搞笑广告词
2014/03/14 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS