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 相关文章推荐
对javascript和select部件的结合运用
Oct 09 PHP
让你同时上传 1000 个文件 (二)
Oct 09 PHP
PHP令牌 Token改进版
Jul 18 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
PHP中常用的转义函数
Feb 28 PHP
PHP中的use关键字概述
Jul 23 PHP
PHP实现动态web服务器方法
Jul 29 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
php语言的7种基本的排序方法
Dec 28 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 PHP
设定php简写功能的方法
Nov 28 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 冒泡排序算法的实现代码
2010/08/08 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
Python实现控制台输入密码的方法
2015/05/29 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
django实现前后台交互实例
2017/08/07 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Python学习小技巧总结
2018/06/10 Python
python导入模块交叉引用的方法
2019/01/19 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
爱普生美国官网:Epson美国
2018/11/05 全球购物
中专毕业生自我鉴定
2013/11/21 职场文书
九年级物理教学反思
2014/01/29 职场文书
会务接待方案
2014/02/27 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
公司合并协议书范本
2014/09/30 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
单身证明范本
2015/06/15 职场文书
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js