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 相关文章推荐
smarty 原来也不过如此~~呵呵
Nov 25 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
基于php验证码函数的使用示例
May 03 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
php中file_get_content 和curl以及fopen 效率分析
Sep 19 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
May 28 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
PHP数组与字符串互相转换实例
May 05 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
计算机大学生的自我评价
2013/10/15 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
诚信高考倡议书
2019/06/24 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android