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 数组基础知识小结
Aug 20 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
Apr 23 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
php图片缩放实现方法
Feb 20 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 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
php中设置index.php文件为只读的方法
2013/02/06 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php猜单词游戏
2015/09/29 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
基于Python的文件类型和字符串详解
2017/12/21 Python
django session完成状态保持的方法
2018/11/27 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
Python控制Firefox方法总结
2019/06/03 Python
通过实例解析Python return运行原理
2020/03/04 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
德国团购网站:Groupon德国
2018/03/13 全球购物
母亲追悼会答谢词
2014/01/27 职场文书
教师师德承诺书
2014/03/26 职场文书
村委会贫困证明范本
2014/09/17 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
党员转正申请报告
2015/05/15 职场文书
演讲开场白和结束语
2015/05/29 职场文书
入党心得体会
2019/06/20 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技