PHP函数处理方法总结

call_user_func_array

(PHP 4 >= 4.0.4, PHP 5, PHP 7)

call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数

说明

mixed call_user_func_array ( callable $callback , array $param_arr )

把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。

参数

callback

被调用的回调函数。

param_arr

要被传入回调函数的数组,这个数组得是索引数组。

返回值

返回回调函数的结果。如果出错的话就返回FALSE

更新日志

版本说明
5.3.0对面向对象里面的关键字的解析有所增强。在此之前,使用两个冒号来连接一个类和里面的一个方法,把它作为参数来作为回调函数的话,将会发出一个E_STRICT的警告,因为这个传入的参数被视为静态方法。

范例

Example #1 call_user_func_array()例子

<?php
function foobar($arg, $arg2) {echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {function bar($arg, $arg2) {echo __METHOD__, " got $arg and $arg2\n";}
}// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>

以上例程的输出类似于:

foobar got one and two
foo::bar got three and four

Example #2 call_user_func_array()使用命名空间的情况

<?phpnamespace Foobar;class Foo {static public function test($name) {print "Hello {$name}!\n";}
}// As of PHP 5.3.0
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));// As of PHP 5.3.0
call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Philip'));?>

以上例程的输出类似于:

Hello Hannes!
Hello Philip!

Example #3 把完整的函数作为回调传入call_user_func_array()

<?php$func = function($arg1, $arg2) {return $arg1 * $arg2;
};var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */?>

以上例程会输出:

int(8)

Example #4 传引用

<?phpfunction mega(&$a){$a = 55;echo "function mega \$a=$a\n";
}
$bar = 77;
call_user_func_array('mega',array(&$bar));
echo "global \$bar=$bar\n";?>

以上例程会输出:

function mega $a=55
global $bar=55

call_user_func

(PHP 4, PHP 5, PHP 7)

call_user_func — 把第一个参数作为回调函数调用

说明

mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

参数

callback

将被调用的回调函数(callable)。

parameter

0个或以上的参数,被传入回调函数。

Note:

请注意,传入call_user_func()的参数不能为引用传递。

Example #1 call_user_func() 的参考例子

<?php
error_reporting(E_ALL);
function increment(&$var)
{$var++;
}$a = 0;
call_user_func('increment', $a);
echo $a."\n";call_user_func_array('increment', array(&$a)); // You can use this instead before PHP 5.3
echo $a."\n";
?>

以上例程会输出:

0
1

返回值

返回回调函数的返回值。

更新日志

版本说明
5.3.0对面向对象里面的关键字的解析有所增强。在此之前,使用两个冒号来连接一个类和里面的一个方法,把它作为参数来作为回调函数的话,将会发出一个E_STRICT的警告,因为这个传入的参数被视为静态方法。

范例

Example #2 call_user_func() 的例子

<?php
function barber($type)
{echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?>

以上例程会输出:

You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem

Example #3 call_user_func() 命名空间的使用

<?phpnamespace Foobar;class Foo {static public function test() {print "Hello world!\n";}
}call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0
call_user_func(array(__NAMESPACE__ .'\Foo', 'test')); // As of PHP 5.3.0?>

以上例程会输出:

Hello world!
Hello world!

Example #4 用call_user_func()来调用一个类里面的方法

<?phpclass myclass {static function say_hello(){echo "Hello!\n";}
}$classname = "myclass";call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello'); // As of 5.2.3$myobject = new myclass();call_user_func(array($myobject, 'say_hello'));?>

以上例程会输出:

Hello!
Hello!
Hello!

Example #5 把完整的函数作为回调传入call_user_func()

<?php
call_user_func(function($arg) { print "[$arg]\n"; }, 'test'); /* As of PHP 5.3.0 */
?>

以上例程会输出:

[test]

注释

Note:

在函数中注册有多个回调内容时(如使用 call_user_func() 与 call_user_func_array()),如在前一个回调中有未捕获的异常,其后的将不再被调用。

create_function

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

create_function — Create an anonymous (lambda-style) function

说明

string create_function ( string $args , string $code )

从传递的参数创建一个匿名函数,并返回一个唯一的名称。

警告
此函数内部执行eval(),因此与eval()具有相同的安全性问题。 此外,它具有不良的性能和内存使用特性。
如果您使用的是PHP 5.3.0或更新版本,则应使用本机匿名函数。

参数

通常这些参数将作为单引号分隔的字符串传递。 使用单引号字符串的原因是保护变量名不被解析,否则,如果使用双引号,则需要转义变量名,例如。\$阿瓦尔。

args

函数参数。

code

功能码。

返回值

以字符串形式返回唯一的函数名称,或者返回错误的FALSE。

范例

Example #1 Creating an anonymous function with create_function()

您可以使用此功能,(例如)从运行时收集的信息创建一个函数:

<?php
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, M_E) . "\n";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>

或者,可能有一般的处理函数可以将一组操作应用于参数列表:

Example #2 Making a general processing function with create_function()

<?php
function process($var1, $var2, $farr)
{foreach ($farr as $f) {echo $f($var1, $var2) . "\n";}
}// create a bunch of math functions
$f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}';
$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);";
$f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }';
$farr = array(create_function('$x,$y', 'return "some trig: ".(sin($x) + $x*cos($y));'),create_function('$x,$y', 'return "a hypotenuse: ".sqrt($x*$x + $y*$y);'),create_function('$a,$b', $f1),create_function('$a,$b', $f2),create_function('$a,$b', $f3));echo "\nUsing the first array of anonymous functions\n";
echo "parameters: 2.3445, M_PI\n";
process(2.3445, M_PI, $farr);// now make a bunch of string processing functions
$garr = array(create_function('$b,$a', 'if (strncmp($a, $b, 3) == 0) return "** \"$a\" '.'and \"$b\"\n** Look the same to me! (looking at the first 3 chars)";'),create_function('$a,$b', '; return "CRCs: " . crc32($a) . ", ".crc32($b);'),create_function('$a,$b', '; return "similar(a,b) = " . similar_text($a, $b, &$p) . "($p%)";'));
echo "\nUsing the second array of anonymous functions\n";
process("Twas brilling and the slithy toves", "Twas the night", $garr);
?>

以上例程会输出:

Using the first array of anonymous functions
parameters: 2.3445, M_PI
some trig: -1.6291725057799
a hypotenuse: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a)/b = 0.27122299212594Using the second array of anonymous functions
** "Twas the night" and "Twas brilling and the slithy toves"
** Look the same to me! (looking at the first 3 chars)
CRCs: -725381282, 342550513
similar(a,b) = 11(45.833333333333%)

但是,对于lambda风格(匿名)函数来说,最常见的用法是创建回调函数,例如使用array_walk()或usort()

Example #3 Using anonymous functions as callback functions

<?php
$av = array("the ", "a ", "that ", "this ");
array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
print_r($av);
?>

以上例程会输出:

Array
([0] => the mango[1] => a mango[2] => that mango[3] => this mango
)

一串字符串从较短到较长的顺序排列

<?php$sv = array("small", "larger", "a big string", "it is a string thing");
print_r($sv);?>

以上例程会输出:

Array
([0] => small[1] => larger[2] => a big string[3] => it is a string thing
)

将其从更长到更短的排序

<?phpusort($sv, create_function('$a,$b','return strlen($b) - strlen($a);'));
print_r($sv);?>

以上例程会输出:

Array
([0] => it is a string thing[1] => a big string[2] => larger[3] => small
)

forward_static_call_array

(PHP 5 >= 5.3.0, PHP 7)

forward_static_call_array — Call a static method and pass the arguments as array

说明

mixed forward_static_call_array ( callable $function , array $parameters )

....

....

....

 

 

 

给个目录

函数处理 函数

  • call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
  • call_user_func — 把第一个参数作为回调函数调用
  • create_function — Create an anonymous (lambda-style) function
  • forward_static_call_array — Call a static method and pass the arguments as array
  • forward_static_call — Call a static method
  • func_get_arg — 返回参数列表的某一项
  • func_get_args — 返回一个包含函数参数列表的数组
  • func_num_args — Returns the number of arguments passed to the function
  • function_exists — 如果给定的函数已经被定义就返回 TRUE
  • get_defined_functions — 返回所有已定义函数的数组
  • register_shutdown_function — 注册一个会在php中止时执行的函数
  • register_tick_function — Register a function for execution on each tick
  • unregister_tick_function — De-register a function for execution on each tick

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django删除多对多表关系 :

删除多对多表关系 &#xff1a; # 删除子表与母表关联关系,让小虎不喜欢任何颜色 # 写法1: child_obj Child.objects.get(name"apollo") colors_obj Colors.objects.all() child_obj.favor child_obj.save() # 写法2: child_obj Child.objects.get(name"apo…

git push/pull时总需要输入用户名密码的解决方案

在提交项目代码或者拉代码的时候&#xff0c;git会让你输入用户名密码&#xff0c;解决方案&#xff1a;&#xff08;我们公司用的是gitlab&#xff09;执行git config --global credential.helper store命令然后git push origin your-branch会让你输入用户名和密码&#xff0c…

Django源代码写DetailView与ListView

基于类的通用视图 - 展平索引 通用显示视图 以下两个通用的基于类的视图旨在显示数据。在许多项目中&#xff0c;它们通常是最常用的视图。 一、DetailView django.views.generic.detail.DetailView 在执行此视图时&#xff0c;self.object将包含视图正在操作的对象。 此视图…

开源商务智能软件Pentaho

1 简介Pentaho是世界上最流行的开源商务智能软件,以工作流为核心的&#xff0c;强调面向解决方案而非工具组件的&#xff0c;基于java平台的商业智能(Business Intelligence,BI)套件BI&#xff0c;之所以说是套件是因为它包括一个web server平台和几个工具软件&#xff1a;报表…

chrome用type=file获取图片路径并转base64字符串

1 html页面 <div class"col-sm-2" style"height: 200px;margin-top: 14px;"> <input id"photo" name" " type"file" value"选择图片" ng-model"photoUrl"> <input type"button&qu…

Python - Django - 中间件 process_exception

process_exception(self, request, exception) 函数有两个参数&#xff0c;exception 是视图函数异常产生的 Exception 对象 process_exception 函数的执行顺序是按照 settings.py 中设置的中间件的顺序的倒序执行 process_exception 函数只在视图函数中出现异常的时候才执行…

NTV Media Server G3性能测试

Hello&#xff01;大家好&#xff0c;我是资深测试工程师Jackie&#xff0c;今天我来和大家一起对云视睿博的高性能流媒体服务器NTV Media Server G3做一次性能测试。今天测试有一个小目标&#xff0c;那就是验证在一台普通的PC机上&#xff0c;NTV Media Server G3的并发能力是…

人生不只是上坡路

从前的自己都是非常顺利的&#xff0c;觉得自己有一天一定可以成就一番事业。 可是谁也预料不到这几年的变化&#xff0c; 似乎人生就要跌落到了谷底&#xff0c; 不知道该如何去面对&#xff0c; 压力很大、惶恐不安、不知道未来的路该如何去走。 人生不只是上坡路&#xff0c…

Django 时间与时区设置问题

Django 时间与时区设置问题 在Django的配置文件settings.py中&#xff0c;有两个配置参数是跟时间与时区有关的&#xff0c;分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时&#xff0c;Django会使用系统默认设置的时区&#xff0c;即America/Chicago&#xff0c;此时的TIME_…

Oracle+ASM单机环境下,开启归档的最简单的方法

在ASM单机环境下&#xff0c;开启归档的最简单的方法。环境&#xff1a;oracle11g 11.2.0.4 登陆sqlplus[oracleudevasm ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Thu Jun 8 18:20:41 2017Copyright (c) 1982, 2013, Oracle. All rights reserved…

【Python】 配置解析ConfigParser 命令行参数解析optparser

ConfigParser ConfigParser包装了配置文件的读取和写入&#xff0c;使得python程序可以更加轻松操作配置文件了。这里的配置文件是指.ini的那种文件&#xff0c;基本格式如下 [section_a] a_key1 a_value1 a_key2 a_value2[section_b] b_key1 b_value1 b_key2 b_value2 b_k…

解决:build_attrs() takes at most 2 arguments (3 given)

1.这个原因是由于captcha版本安装太低引起的&#xff0c;所以导致register页面打开报错 2.解决办法就是安装更高级版本的captcha 解决pip install django-simple-captcha0.5.5

docker registry v2与harbor的搭建

docker的仓库 1 registry的安装 docker的仓库我们可以使用docker自带的registry,安装起来很简单&#xff0c;但是可能有点使用起来不是很方便。没有图形化。 开始安装 1 使用镜像加速器 2 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dc945b6d.m…

在windows下安装Redis

一、下载windows版本的Redis 由于官网上没有windows版的下载地址&#xff0c;所以需要下载windows版本的Redis有以下两个地址&#xff1a; 博主的csdn资源地址&#xff1a;http://download.csdn.net/detail/u010608551/9778240 github下载地址&#xff1a;https://github.com/M…

Django REST framework【学习内容】

快速入门 我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API。 项目设置 创建一个名为 tutorial 的新django项目&#xff0c;然后启动一个名为 quickstart 的新app。 # 创建项目目录 mkdir tutorial cd tutorial# 创建一个virtualenv来隔离我们本地的包依…

DotNetCore跨平台~发布脚本PowerShell的设计

回到目录 这几天对PS情有独忠&#xff0c;被它的强大功能所希引&#xff0c;它可以快速部署&#xff0c;快速发布&#xff0c;将一些连带的动作一次的完成&#xff0c;挺方便&#xff0c;类似于早期的bat文件&#xff0c;也像linux平台的bash脚本&#xff0c;但功能上&#xff…

解决: 'Cannot call `.is_valid()` as no `data=` keyword argument was ' AssertionError: Cannot call `

#注册 def add_person(request):p_name request.POST.get("p_name")p_password request.POST.get("p_password")person_data {"p_name": p_name,"p_password": p_password,}print(person_data)serializer PersonSerializer(person…

软件与程序

一、Java的起源 最初是为家用电器设计的&#xff0c;因为其特点适合于internet&#xff0c; 于是通过internet成为一种计算语言&#xff0c;一个平台&#xff0c;一个网络计算的架构。 二、Java平台分类 ①JavaSE适用于普通PC及笔记本电脑&#xff0c;为其他JAVA程序的开发和运…

Django使用n内置模块发送HTML格式的邮件

def send(request):# subject "小伙子很帅"# message "不禁夸啊"# send_mail(subject,message,"18332191389163.com",["18332191389163.com"])# return HttpResponse("ok")from django.core.mail import EmailMultiAltern…

EDM营销之如何使邮件列表更加有效

营销转化往往是营销人员专攻的必修课&#xff0c;大数据时代&#xff0c;只有真实有效的活跃用户数据&#xff0c;才能进一步促进转化。但仍然有想走捷径的企业会选择通过购买来获取用户数据&#xff0c;不仅数据质量不高&#xff0c;还会降低自身信誉等级。本次Focussend从购买…