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 相关文章推荐
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
php 获取全局变量的代码
Apr 21 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
php curl 上传文件代码实例
Apr 27 PHP
33道php常见面试题及答案
Jul 06 PHP
php使用glob函数遍历文件和目录详解
Sep 23 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
php多文件打包下载的实例代码
Jul 12 PHP
Laravel学习基础之migrate的使用教程
Oct 11 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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
PHP 变量定义和变量替换的方法
2009/07/30 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
js单例模式的两种方案
2013/10/22 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
Python算术运算符实例详解
2017/05/31 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
python 19个值得学习的编程技巧
2020/08/15 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
物流管理专业推荐信
2014/09/06 职场文书
银行竞聘报告范文
2014/11/06 职场文书
副总经理岗位职责
2015/02/02 职场文书
建党伟业观后感
2015/06/01 职场文书
财务管理制度范本
2015/08/04 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
Python Numpy库的超详细教程
2022/04/06 Python
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript