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下实现农历日历的代码
Mar 07 PHP
用PHP制作的意见反馈表源码
Mar 11 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
PHP中使用gettext来支持多语言的方法
May 02 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
Apr 25 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
PHP7如何开启Opcode打造强悍性能详解
May 11 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根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
php 常用的系统函数
2017/02/07 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php 可变函数使用小结
2018/06/12 PHP
php5与php7的区别点总结
2019/10/11 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
python实现最小二乘法线性拟合
2019/07/19 Python
浅谈python锁与死锁问题
2020/08/14 Python
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
外企测试工程师面试题
2015/02/01 面试题
个人应聘自我评价分享
2013/11/18 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
党员批评与自我批评
2014/10/15 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers
PyQt5实现多张图片显示并滚动
2021/06/11 Python
MySQL连接控制插件介绍
2021/09/25 MySQL