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默认安装产生系统漏洞
Oct 09 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 PHP
laravel 出现command not found问题的解决方案
Oct 23 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
php session_decode函数用法讲解
2019/05/26 PHP
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python 调用Java实例详解
2017/06/02 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Python 获取div标签中的文字实例
2018/12/20 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python使用递归的方式建立二叉树
2019/07/03 Python
Pytorch的mean和std调查实例
2020/01/02 Python
python构造函数init实例方法解析
2020/01/19 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
社团活动总结
2014/04/28 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
团代会邀请函
2015/02/02 职场文书
义诊活动总结
2015/02/04 职场文书
个人欠条范本
2015/07/03 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery