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 相关文章推荐
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
php查找字符串出现次数的方法
Dec 01 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
php smtp实现发送邮件功能
Jun 22 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 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 什么是PEAR?(第二篇)
2009/03/19 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
Jquery解析json数据详解
2013/12/26 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python中zfill()方法的使用教程
2015/05/20 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python迭代和迭代器详解
2016/11/10 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python版名片管理系统
2018/11/30 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
如何让python的运行速度得到提升
2020/07/08 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
JAVA程序员自荐书
2014/01/30 职场文书
质量承诺书怎么写
2014/05/24 职场文书
银行求职信
2014/05/31 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
幼儿园见习总结
2015/06/23 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android