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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
php中文字符截取防乱码
Mar 28 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
PHP解析RSS的方法
Mar 05 PHP
PHP函数超时处理方法
Feb 14 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 PHP
PHP7 错误处理机制修改
Mar 09 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
js模拟微博发布消息
2017/02/23 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
python使用socket向客户端发送数据的方法
2015/04/29 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
pandas带有重复索引操作方法
2018/06/08 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
旅游管理毕业生自荐信
2013/11/05 职场文书
中专生的个人自我评价
2013/12/11 职场文书
小学安全汇报材料
2014/08/14 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
python OpenCV学习笔记
2021/03/31 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js