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数组应该有多大的分析
Jul 30 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
Jun 26 PHP
php+ajax实现无刷新分页的方法
Nov 04 PHP
PHP解析RSS的方法
Mar 05 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
php中的buffer缓冲区用法分析
May 31 PHP
YII2框架中actions的作用与使用方法示例
Mar 13 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实现小型站点广告管理
2006/10/09 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
如何实现JS函数的重载
2006/09/22 Javascript
javascript indexOf函数使用说明
2008/07/03 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
Python3中的bytes和str类型详解
2019/05/02 Python
Django URL参数Template反向解析
2020/11/24 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
小学后勤管理制度
2014/01/14 职场文书
节能环保口号
2014/06/12 职场文书
销售活动策划方案
2014/08/26 职场文书