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文件怎么打开 如何执行php文件
Dec 21 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
解析PHP工厂模式的好处
Jun 18 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
thinkPHP实现将excel导入到数据库中的方法
Apr 22 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
如何在centos8自定义目录安装php7.3
Nov 28 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 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
杏林同学录(八)
2006/10/09 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
js Function类型
2011/12/04 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
python实现识别相似图片小结
2016/02/22 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
python如何随机生成高强度密码
2020/08/19 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
一套PHP的笔试题
2013/05/31 面试题
聚网科技C++面试笔试题
2015/09/01 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
卫校毕业生自我鉴定
2013/10/31 职场文书
商务日语毕业生自荐信范文
2013/11/14 职场文书
大学生暑期实践感言
2014/02/26 职场文书
美化环境标语
2014/06/20 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
python垃圾回收机制原理分析
2022/04/13 Python
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python